@openrig/cli 0.3.1 → 0.3.2
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.
- package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +2 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/tmux.d.ts +36 -0
- package/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/daemon/dist/adapters/tmux.js +66 -0
- package/daemon/dist/adapters/tmux.js.map +1 -1
- package/daemon/dist/db/migrations/037_mission_control_actions.d.ts +5 -1
- package/daemon/dist/db/migrations/037_mission_control_actions.d.ts.map +1 -1
- package/daemon/dist/db/migrations/037_mission_control_actions.js +5 -1
- package/daemon/dist/db/migrations/037_mission_control_actions.js.map +1 -1
- package/daemon/dist/db/migrations/041_rig_policy.d.ts +32 -0
- package/daemon/dist/db/migrations/041_rig_policy.d.ts.map +1 -0
- package/daemon/dist/db/migrations/041_rig_policy.js +47 -0
- package/daemon/dist/db/migrations/041_rig_policy.js.map +1 -0
- package/daemon/dist/domain/agent-images/resume-token-discovery.js +1 -1
- package/daemon/dist/domain/agent-images/resume-token-discovery.js.map +1 -1
- package/daemon/dist/domain/agent-images/snapshot-capturer.d.ts.map +1 -1
- package/daemon/dist/domain/agent-images/snapshot-capturer.js +2 -1
- package/daemon/dist/domain/agent-images/snapshot-capturer.js.map +1 -1
- package/daemon/dist/domain/agent-manifest.js +27 -0
- package/daemon/dist/domain/agent-manifest.js.map +1 -1
- package/daemon/dist/domain/bootstrap-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/bootstrap-orchestrator.js +86 -6
- package/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -1
- package/daemon/dist/domain/bundle-agent-images-router.d.ts +95 -0
- package/daemon/dist/domain/bundle-agent-images-router.d.ts.map +1 -0
- package/daemon/dist/domain/bundle-agent-images-router.js +140 -0
- package/daemon/dist/domain/bundle-agent-images-router.js.map +1 -0
- package/daemon/dist/domain/bundle-assembler.d.ts +18 -1
- package/daemon/dist/domain/bundle-assembler.d.ts.map +1 -1
- package/daemon/dist/domain/bundle-assembler.js +11 -1
- package/daemon/dist/domain/bundle-assembler.js.map +1 -1
- package/daemon/dist/domain/bundle-audit.d.ts +89 -0
- package/daemon/dist/domain/bundle-audit.d.ts.map +1 -0
- package/daemon/dist/domain/bundle-audit.js +87 -0
- package/daemon/dist/domain/bundle-audit.js.map +1 -0
- package/daemon/dist/domain/bundle-conflict-detector.d.ts +57 -0
- package/daemon/dist/domain/bundle-conflict-detector.d.ts.map +1 -0
- package/daemon/dist/domain/bundle-conflict-detector.js +49 -0
- package/daemon/dist/domain/bundle-conflict-detector.js.map +1 -0
- package/daemon/dist/domain/bundle-context-packs-router.d.ts +100 -0
- package/daemon/dist/domain/bundle-context-packs-router.d.ts.map +1 -0
- package/daemon/dist/domain/bundle-context-packs-router.js +158 -0
- package/daemon/dist/domain/bundle-context-packs-router.js.map +1 -0
- package/daemon/dist/domain/bundle-plugins-router.d.ts +69 -0
- package/daemon/dist/domain/bundle-plugins-router.d.ts.map +1 -0
- package/daemon/dist/domain/bundle-plugins-router.js +87 -0
- package/daemon/dist/domain/bundle-plugins-router.js.map +1 -0
- package/daemon/dist/domain/bundle-skills-router.d.ts +62 -0
- package/daemon/dist/domain/bundle-skills-router.d.ts.map +1 -0
- package/daemon/dist/domain/bundle-skills-router.js +90 -0
- package/daemon/dist/domain/bundle-skills-router.js.map +1 -0
- package/daemon/dist/domain/bundle-types.d.ts +106 -0
- package/daemon/dist/domain/bundle-types.d.ts.map +1 -1
- package/daemon/dist/domain/bundle-types.js +375 -0
- package/daemon/dist/domain/bundle-types.js.map +1 -1
- package/daemon/dist/domain/bundle-workflow-specs-router.d.ts +94 -0
- package/daemon/dist/domain/bundle-workflow-specs-router.d.ts.map +1 -0
- package/daemon/dist/domain/bundle-workflow-specs-router.js +144 -0
- package/daemon/dist/domain/bundle-workflow-specs-router.js.map +1 -0
- package/daemon/dist/domain/context-monitor.d.ts +5 -1
- package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
- package/daemon/dist/domain/context-monitor.js +28 -15
- package/daemon/dist/domain/context-monitor.js.map +1 -1
- package/daemon/dist/domain/graph-projection.d.ts +6 -0
- package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
- package/daemon/dist/domain/graph-projection.js +6 -0
- package/daemon/dist/domain/graph-projection.js.map +1 -1
- package/daemon/dist/domain/native-resume-probe.js +7 -7
- package/daemon/dist/domain/native-resume-probe.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts +18 -0
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +98 -0
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/node-launcher.d.ts +12 -0
- package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/node-launcher.js +25 -1
- package/daemon/dist/domain/node-launcher.js.map +1 -1
- package/daemon/dist/domain/pod-bundle-assembler.d.ts +16 -1
- package/daemon/dist/domain/pod-bundle-assembler.d.ts.map +1 -1
- package/daemon/dist/domain/pod-bundle-assembler.js +11 -1
- package/daemon/dist/domain/pod-bundle-assembler.js.map +1 -1
- package/daemon/dist/domain/profile-resolver.d.ts +10 -0
- package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
- package/daemon/dist/domain/profile-resolver.js +4 -0
- package/daemon/dist/domain/profile-resolver.js.map +1 -1
- package/daemon/dist/domain/ps-projection.d.ts +22 -0
- package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
- package/daemon/dist/domain/ps-projection.js +57 -0
- package/daemon/dist/domain/ps-projection.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +37 -1
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +99 -2
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/restore-check-service.d.ts +4 -0
- package/daemon/dist/domain/restore-check-service.d.ts.map +1 -1
- package/daemon/dist/domain/restore-check-service.js +16 -7
- package/daemon/dist/domain/restore-check-service.js.map +1 -1
- package/daemon/dist/domain/rig-policy/rig-policy-defaults.d.ts +48 -0
- package/daemon/dist/domain/rig-policy/rig-policy-defaults.d.ts.map +1 -0
- package/daemon/dist/domain/rig-policy/rig-policy-defaults.js +96 -0
- package/daemon/dist/domain/rig-policy/rig-policy-defaults.js.map +1 -0
- package/daemon/dist/domain/rig-policy/rig-policy-store.d.ts +46 -0
- package/daemon/dist/domain/rig-policy/rig-policy-store.d.ts.map +1 -0
- package/daemon/dist/domain/rig-policy/rig-policy-store.js +171 -0
- package/daemon/dist/domain/rig-policy/rig-policy-store.js.map +1 -0
- package/daemon/dist/domain/rig-policy/rig-policy-types.d.ts +145 -0
- package/daemon/dist/domain/rig-policy/rig-policy-types.d.ts.map +1 -0
- package/daemon/dist/domain/rig-policy/rig-policy-types.js +52 -0
- package/daemon/dist/domain/rig-policy/rig-policy-types.js.map +1 -0
- package/daemon/dist/domain/rig-policy/rig-policy-validator.d.ts +58 -0
- package/daemon/dist/domain/rig-policy/rig-policy-validator.d.ts.map +1 -0
- package/daemon/dist/domain/rig-policy/rig-policy-validator.js +211 -0
- package/daemon/dist/domain/rig-policy/rig-policy-validator.js.map +1 -0
- package/daemon/dist/domain/rigspec-instantiator.d.ts +1 -1
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +109 -18
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/seat-activity-service.d.ts +79 -0
- package/daemon/dist/domain/seat-activity-service.d.ts.map +1 -0
- package/daemon/dist/domain/seat-activity-service.js +123 -0
- package/daemon/dist/domain/seat-activity-service.js.map +1 -0
- package/daemon/dist/domain/slices/slice-indexer.d.ts +12 -0
- package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
- package/daemon/dist/domain/slices/slice-indexer.js +23 -0
- package/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
- package/daemon/dist/domain/spec-library-service.d.ts.map +1 -1
- package/daemon/dist/domain/spec-library-service.js +19 -0
- package/daemon/dist/domain/spec-library-service.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +79 -3
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/workflow-spec-cache.d.ts +22 -0
- package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-spec-cache.js +37 -0
- package/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +7 -0
- package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js +156 -3
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
- package/daemon/dist/domain/workspace/workspace-doctor.d.ts +197 -0
- package/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -0
- package/daemon/dist/domain/workspace/workspace-doctor.js +448 -0
- package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -0
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +11 -0
- package/daemon/dist/index.js.map +1 -1
- package/daemon/dist/routes/bundles.d.ts.map +1 -1
- package/daemon/dist/routes/bundles.js +966 -7
- package/daemon/dist/routes/bundles.js.map +1 -1
- package/daemon/dist/routes/config.d.ts.map +1 -1
- package/daemon/dist/routes/config.js +19 -2
- package/daemon/dist/routes/config.js.map +1 -1
- package/daemon/dist/routes/info.d.ts +3 -0
- package/daemon/dist/routes/info.d.ts.map +1 -0
- package/daemon/dist/routes/info.js +20 -0
- package/daemon/dist/routes/info.js.map +1 -0
- package/daemon/dist/routes/queue.d.ts +18 -0
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +97 -5
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/rig-policy.d.ts +9 -0
- package/daemon/dist/routes/rig-policy.d.ts.map +1 -0
- package/daemon/dist/routes/rig-policy.js +174 -0
- package/daemon/dist/routes/rig-policy.js.map +1 -0
- package/daemon/dist/routes/rigs.d.ts.map +1 -1
- package/daemon/dist/routes/rigs.js +10 -2
- package/daemon/dist/routes/rigs.js.map +1 -1
- package/daemon/dist/routes/sessions.d.ts.map +1 -1
- package/daemon/dist/routes/sessions.js +26 -3
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/up.d.ts +25 -0
- package/daemon/dist/routes/up.d.ts.map +1 -1
- package/daemon/dist/routes/up.js +70 -3
- package/daemon/dist/routes/up.js.map +1 -1
- package/daemon/dist/routes/workspace.d.ts.map +1 -1
- package/daemon/dist/routes/workspace.js +80 -1
- package/daemon/dist/routes/workspace.js.map +1 -1
- package/daemon/dist/server.d.ts +10 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +11 -0
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +45 -4
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/specs/agents/orchestration/orchestrator/guidance/role.md +28 -4
- package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +285 -8
- package/daemon/specs/agents/shared/skills/core/rig-lifecycle/SKILL.md +2 -2
- package/daemon/specs/rigs/launch/conveyor/rig.yaml +1 -1
- package/dist/client.d.ts +3 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +13 -1
- package/dist/client.js.map +1 -1
- package/dist/commands/bundle.d.ts.map +1 -1
- package/dist/commands/bundle.js +123 -2
- package/dist/commands/bundle.js.map +1 -1
- package/dist/commands/config-init-workspace.d.ts.map +1 -1
- package/dist/commands/config-init-workspace.js +40 -5
- package/dist/commands/config-init-workspace.js.map +1 -1
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +51 -8
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/queue.d.ts +6 -0
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +103 -5
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/rig-policy.d.ts +48 -0
- package/dist/commands/rig-policy.d.ts.map +1 -0
- package/dist/commands/rig-policy.js +429 -0
- package/dist/commands/rig-policy.js.map +1 -0
- package/dist/commands/scope.d.ts +6 -0
- package/dist/commands/scope.d.ts.map +1 -0
- package/dist/commands/scope.js +659 -0
- package/dist/commands/scope.js.map +1 -0
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +47 -0
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/workflow.d.ts +9 -0
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +139 -1
- package/dist/commands/workflow.js.map +1 -1
- package/dist/commands/workspace.d.ts +20 -0
- package/dist/commands/workspace.d.ts.map +1 -1
- package/dist/commands/workspace.js +138 -7
- package/dist/commands/workspace.js.map +1 -1
- package/dist/daemon-lifecycle.d.ts +25 -1
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +33 -2
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/scope/dot-id.d.ts +43 -0
- package/dist/lib/scope/dot-id.d.ts.map +1 -0
- package/dist/lib/scope/dot-id.js +165 -0
- package/dist/lib/scope/dot-id.js.map +1 -0
- package/dist/lib/scope/scope-fs.d.ts +79 -0
- package/dist/lib/scope/scope-fs.d.ts.map +1 -0
- package/dist/lib/scope/scope-fs.js +468 -0
- package/dist/lib/scope/scope-fs.js.map +1 -0
- package/dist/lib/scope/templates.d.ts +38 -0
- package/dist/lib/scope/templates.d.ts.map +1 -0
- package/dist/lib/scope/templates.js +109 -0
- package/dist/lib/scope/templates.js.map +1 -0
- package/dist/lib/scope/types.d.ts +61 -0
- package/dist/lib/scope/types.d.ts.map +1 -0
- package/dist/lib/scope/types.js +38 -0
- package/dist/lib/scope/types.js.map +1 -0
- package/dist/lib/scope-templates/backlog-deprecation.md +26 -0
- package/dist/lib/scope-templates/backlog-tech-debt.md +22 -0
- package/dist/lib/scope-templates/bug-fix.md +30 -0
- package/dist/lib/scope-templates/mission-notes.md +97 -0
- package/dist/lib/scope-templates/mission-placeholder.md +20 -0
- package/dist/lib/scope-templates/mission-release.md +25 -0
- package/dist/lib/scope-templates/placeholder.md +30 -0
- package/dist/lib/scope-templates/release-feature.md +26 -0
- package/dist/lib/scope-templates/research.md +22 -0
- package/package.json +2 -2
- package/ui/dist/assets/index-GjTxfi9S.js +547 -0
- package/ui/dist/index.html +1 -1
- package/ui/dist/assets/index-Rl3ZBrUg.js +0 -547
|
@@ -0,0 +1,468 @@
|
|
|
1
|
+
// release-0.3.2 slice 12 — filesystem + git helpers shared across
|
|
2
|
+
// `rig scope` verbs. Mission/slice discovery, frontmatter parse/write,
|
|
3
|
+
// auto-numbering, git mv wrapper. Keeps slice/mission command files
|
|
4
|
+
// thin.
|
|
5
|
+
import { execFileSync } from "node:child_process";
|
|
6
|
+
import fs from "node:fs";
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
import YAML from "yaml";
|
|
9
|
+
import { ScopeCliError } from "./types.js";
|
|
10
|
+
import { DEFAULT_PROJECT_PREFIX, inferMissionDotId, nextEscapeBandOrdinal, } from "./dot-id.js";
|
|
11
|
+
const FRONTMATTER_DELIM = "---\n";
|
|
12
|
+
const SLICE_DIRNAME_RE = /^(\d+)-(.+)$/;
|
|
13
|
+
// ---------------------------------------------------------------------
|
|
14
|
+
// Frontmatter parse + write
|
|
15
|
+
// ---------------------------------------------------------------------
|
|
16
|
+
/** Split a markdown file into [frontmatter, body]. Returns `[{}, content]`
|
|
17
|
+
* when no frontmatter delimiter is present. */
|
|
18
|
+
export function splitFrontmatter(content) {
|
|
19
|
+
if (!content.startsWith(FRONTMATTER_DELIM)) {
|
|
20
|
+
return { frontmatter: {}, body: content };
|
|
21
|
+
}
|
|
22
|
+
const rest = content.slice(FRONTMATTER_DELIM.length);
|
|
23
|
+
const endIdx = rest.indexOf(`\n${FRONTMATTER_DELIM.trim()}\n`);
|
|
24
|
+
if (endIdx === -1) {
|
|
25
|
+
// Allow trailing `---` without a final newline (last char of file).
|
|
26
|
+
const endIdx2 = rest.indexOf(`\n---`);
|
|
27
|
+
if (endIdx2 === -1)
|
|
28
|
+
return { frontmatter: {}, body: content };
|
|
29
|
+
const raw = rest.slice(0, endIdx2);
|
|
30
|
+
return { frontmatter: parseYamlSafely(raw), body: rest.slice(endIdx2 + 4).replace(/^\n/, "") };
|
|
31
|
+
}
|
|
32
|
+
const raw = rest.slice(0, endIdx);
|
|
33
|
+
const body = rest.slice(endIdx + `\n${FRONTMATTER_DELIM.trim()}\n`.length);
|
|
34
|
+
return { frontmatter: parseYamlSafely(raw), body };
|
|
35
|
+
}
|
|
36
|
+
function parseYamlSafely(raw) {
|
|
37
|
+
try {
|
|
38
|
+
const parsed = YAML.parse(raw);
|
|
39
|
+
return parsed && typeof parsed === "object" && !Array.isArray(parsed)
|
|
40
|
+
? parsed
|
|
41
|
+
: {};
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return {};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** Re-stitch frontmatter + body into a single markdown string. */
|
|
48
|
+
export function joinFrontmatter(frontmatter, body) {
|
|
49
|
+
const yaml = YAML.stringify(frontmatter, { lineWidth: 0 }).trim();
|
|
50
|
+
const trailing = body.startsWith("\n") ? "" : "\n";
|
|
51
|
+
return `---\n${yaml}\n---\n${trailing}${body}`;
|
|
52
|
+
}
|
|
53
|
+
/** Read + parse frontmatter from a markdown file. Returns `{}` if the
|
|
54
|
+
* file is missing OR has no frontmatter (graceful for placeholder
|
|
55
|
+
* missions that pre-date the convention). */
|
|
56
|
+
export function readFrontmatter(absPath) {
|
|
57
|
+
try {
|
|
58
|
+
return splitFrontmatter(fs.readFileSync(absPath, "utf8")).frontmatter;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return {};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** Update specific keys in a markdown file's frontmatter. Existing
|
|
65
|
+
* unknown keys are preserved. Generates minimal frontmatter when
|
|
66
|
+
* absent. */
|
|
67
|
+
export function updateFrontmatter(absPath, updates) {
|
|
68
|
+
const original = fs.existsSync(absPath) ? fs.readFileSync(absPath, "utf8") : "";
|
|
69
|
+
const { frontmatter, body } = splitFrontmatter(original);
|
|
70
|
+
const merged = { ...frontmatter, ...updates };
|
|
71
|
+
fs.writeFileSync(absPath, joinFrontmatter(merged, body), "utf8");
|
|
72
|
+
}
|
|
73
|
+
// ---------------------------------------------------------------------
|
|
74
|
+
// Mission discovery
|
|
75
|
+
// ---------------------------------------------------------------------
|
|
76
|
+
/** Locate the missions root for the working substrate. Resolution
|
|
77
|
+
* order:
|
|
78
|
+
* 1. Explicit override (env or arg)
|
|
79
|
+
* 2. $OPENRIG_WORK_ROOT/missions
|
|
80
|
+
* 3. Search up from cwd for a `missions/` folder
|
|
81
|
+
*/
|
|
82
|
+
export function resolveMissionsRoot(opts = {}) {
|
|
83
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
84
|
+
const fromOverride = opts.override ?? process.env.OPENRIG_WORK_ROOT;
|
|
85
|
+
if (fromOverride) {
|
|
86
|
+
const candidate = path.isAbsolute(fromOverride) ? fromOverride : path.resolve(cwd, fromOverride);
|
|
87
|
+
const missions = path.join(candidate, "missions");
|
|
88
|
+
if (fs.existsSync(missions) && fs.statSync(missions).isDirectory())
|
|
89
|
+
return missions;
|
|
90
|
+
if (path.basename(candidate) === "missions" && fs.existsSync(candidate))
|
|
91
|
+
return candidate;
|
|
92
|
+
}
|
|
93
|
+
let dir = cwd;
|
|
94
|
+
for (let i = 0; i < 8; i++) {
|
|
95
|
+
const candidate = path.join(dir, "missions");
|
|
96
|
+
if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory())
|
|
97
|
+
return candidate;
|
|
98
|
+
const parent = path.dirname(dir);
|
|
99
|
+
if (parent === dir)
|
|
100
|
+
break;
|
|
101
|
+
dir = parent;
|
|
102
|
+
}
|
|
103
|
+
throw new ScopeCliError({
|
|
104
|
+
fact: `Could not locate a missions/ root from cwd ${cwd}.`,
|
|
105
|
+
consequence: "No mission tree to operate on.",
|
|
106
|
+
action: "cd into the substrate workspace, or set OPENRIG_WORK_ROOT=/path/to/your/workspace.",
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/** List mission folders under the missions root. A mission is any
|
|
110
|
+
* top-level folder containing a README.md (per IMPLEMENTATION-PRD
|
|
111
|
+
* §2.1 / HG-8). Directories without a README.md are skipped — they
|
|
112
|
+
* represent scratch/junk, not declared missions. */
|
|
113
|
+
export function listMissions(missionsRoot) {
|
|
114
|
+
if (!fs.existsSync(missionsRoot))
|
|
115
|
+
return [];
|
|
116
|
+
const entries = fs.readdirSync(missionsRoot, { withFileTypes: true });
|
|
117
|
+
const out = [];
|
|
118
|
+
for (const entry of entries) {
|
|
119
|
+
if (!entry.isDirectory())
|
|
120
|
+
continue;
|
|
121
|
+
const absPath = path.join(missionsRoot, entry.name);
|
|
122
|
+
const readmePath = path.join(absPath, "README.md");
|
|
123
|
+
const hasReadme = fs.existsSync(readmePath);
|
|
124
|
+
if (!hasReadme)
|
|
125
|
+
continue;
|
|
126
|
+
const frontmatter = readFrontmatter(readmePath);
|
|
127
|
+
const slicesDir = path.join(absPath, "slices");
|
|
128
|
+
const closedDir = path.join(absPath, "closed");
|
|
129
|
+
const activeSliceCount = countSliceDirs(slicesDir);
|
|
130
|
+
const closedSliceCount = countSliceDirs(closedDir);
|
|
131
|
+
const id = pickIdFromFrontmatter(frontmatter);
|
|
132
|
+
out.push({
|
|
133
|
+
name: entry.name,
|
|
134
|
+
absPath,
|
|
135
|
+
readmePath: hasReadme ? readmePath : null,
|
|
136
|
+
frontmatter,
|
|
137
|
+
id,
|
|
138
|
+
activeSliceCount,
|
|
139
|
+
closedSliceCount,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
// Stable order: by mission name.
|
|
143
|
+
out.sort((a, b) => a.name.localeCompare(b.name));
|
|
144
|
+
return out;
|
|
145
|
+
}
|
|
146
|
+
function countSliceDirs(dir) {
|
|
147
|
+
if (!fs.existsSync(dir))
|
|
148
|
+
return 0;
|
|
149
|
+
return fs.readdirSync(dir, { withFileTypes: true })
|
|
150
|
+
.filter((e) => e.isDirectory() && SLICE_DIRNAME_RE.test(e.name))
|
|
151
|
+
.length;
|
|
152
|
+
}
|
|
153
|
+
function pickIdFromFrontmatter(fm) {
|
|
154
|
+
const candidate = fm.id ?? fm.dotId;
|
|
155
|
+
return typeof candidate === "string" && candidate.length > 0 ? candidate : null;
|
|
156
|
+
}
|
|
157
|
+
/** Resolve a mission by name OR path relative to the missions root.
|
|
158
|
+
* Throws ScopeCliError on miss OR when the directory exists but
|
|
159
|
+
* lacks a README.md (consistent with listMissions' README gate per
|
|
160
|
+
* PRD §2.1 / HG-8 — README-less dirs are scratch/junk, not declared
|
|
161
|
+
* missions, so mutation commands must not silently target them). */
|
|
162
|
+
export function findMission(missionsRoot, identifier) {
|
|
163
|
+
const candidates = [
|
|
164
|
+
path.join(missionsRoot, identifier),
|
|
165
|
+
path.isAbsolute(identifier) ? identifier : path.resolve(missionsRoot, identifier),
|
|
166
|
+
];
|
|
167
|
+
for (const candidate of candidates) {
|
|
168
|
+
if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory()) {
|
|
169
|
+
const readmePath = path.join(candidate, "README.md");
|
|
170
|
+
if (!fs.existsSync(readmePath)) {
|
|
171
|
+
throw new ScopeCliError({
|
|
172
|
+
fact: `Directory "${identifier}" exists at ${candidate} but contains no README.md.`,
|
|
173
|
+
consequence: "It is not a declared mission. Command did not run.",
|
|
174
|
+
action: "Create it as a mission with: rig scope mission create " + identifier + ". Or add a README.md if the folder is intended to be a mission.",
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
return buildMissionInfo(missionsRoot, candidate);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
throw new ScopeCliError({
|
|
181
|
+
fact: `Mission "${identifier}" not found under ${missionsRoot}.`,
|
|
182
|
+
consequence: "Command did not run.",
|
|
183
|
+
action: "List available missions with: rig scope mission ls",
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
function buildMissionInfo(missionsRoot, absPath) {
|
|
187
|
+
const readmePath = path.join(absPath, "README.md");
|
|
188
|
+
const hasReadme = fs.existsSync(readmePath);
|
|
189
|
+
const frontmatter = hasReadme ? readFrontmatter(readmePath) : {};
|
|
190
|
+
return {
|
|
191
|
+
name: path.basename(absPath),
|
|
192
|
+
absPath,
|
|
193
|
+
readmePath: hasReadme ? readmePath : null,
|
|
194
|
+
frontmatter,
|
|
195
|
+
id: pickIdFromFrontmatter(frontmatter),
|
|
196
|
+
activeSliceCount: countSliceDirs(path.join(absPath, "slices")),
|
|
197
|
+
closedSliceCount: countSliceDirs(path.join(absPath, "closed")),
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
// ---------------------------------------------------------------------
|
|
201
|
+
// Slice discovery
|
|
202
|
+
// ---------------------------------------------------------------------
|
|
203
|
+
export function listSlices(mission, state) {
|
|
204
|
+
const dirs = [];
|
|
205
|
+
if (state === "active" || state === "shipped" || state === "all") {
|
|
206
|
+
dirs.push({ root: path.join(mission.absPath, "slices"), bucket: "active" });
|
|
207
|
+
}
|
|
208
|
+
if (state === "closed" || state === "all") {
|
|
209
|
+
dirs.push({ root: path.join(mission.absPath, "closed"), bucket: "closed" });
|
|
210
|
+
}
|
|
211
|
+
const out = [];
|
|
212
|
+
for (const { root } of dirs) {
|
|
213
|
+
if (!fs.existsSync(root))
|
|
214
|
+
continue;
|
|
215
|
+
for (const entry of fs.readdirSync(root, { withFileTypes: true })) {
|
|
216
|
+
if (!entry.isDirectory())
|
|
217
|
+
continue;
|
|
218
|
+
const m = SLICE_DIRNAME_RE.exec(entry.name);
|
|
219
|
+
if (!m)
|
|
220
|
+
continue;
|
|
221
|
+
const sliceInfo = buildSliceInfo(mission, root, entry.name);
|
|
222
|
+
out.push(sliceInfo);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (state === "active") {
|
|
226
|
+
// active = not in closed/, but also not shipped status.
|
|
227
|
+
return out.filter((s) => {
|
|
228
|
+
const st = (s.status ?? "").toLowerCase();
|
|
229
|
+
return !st.startsWith("closed") && !st.startsWith("shipped");
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
if (state === "shipped") {
|
|
233
|
+
return out.filter((s) => (s.status ?? "").toLowerCase().startsWith("shipped"));
|
|
234
|
+
}
|
|
235
|
+
return out;
|
|
236
|
+
}
|
|
237
|
+
function buildSliceInfo(mission, sliceRoot, dirName) {
|
|
238
|
+
const m = SLICE_DIRNAME_RE.exec(dirName);
|
|
239
|
+
const nn = m ? Number(m[1]) : null;
|
|
240
|
+
const slug = m ? m[2] : null;
|
|
241
|
+
const absPath = path.join(sliceRoot, dirName);
|
|
242
|
+
const readmePath = path.join(absPath, "README.md");
|
|
243
|
+
const hasReadme = fs.existsSync(readmePath);
|
|
244
|
+
const frontmatter = hasReadme ? readFrontmatter(readmePath) : {};
|
|
245
|
+
const id = pickIdFromFrontmatter(frontmatter);
|
|
246
|
+
const status = typeof frontmatter.status === "string" ? frontmatter.status.toLowerCase() : null;
|
|
247
|
+
return {
|
|
248
|
+
name: dirName,
|
|
249
|
+
absPath,
|
|
250
|
+
readmePath: hasReadme ? readmePath : null,
|
|
251
|
+
frontmatter,
|
|
252
|
+
nn,
|
|
253
|
+
slug,
|
|
254
|
+
missionName: mission.name,
|
|
255
|
+
id,
|
|
256
|
+
status,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
/** Resolve a slice path (absolute, relative-to-substrate, or
|
|
260
|
+
* relative-to-mission) into a SliceInfo. */
|
|
261
|
+
export function findSlice(missionsRoot, slicePath, hintMission) {
|
|
262
|
+
const candidates = [];
|
|
263
|
+
if (path.isAbsolute(slicePath)) {
|
|
264
|
+
candidates.push(slicePath);
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
candidates.push(path.resolve(missionsRoot, "..", slicePath));
|
|
268
|
+
candidates.push(path.resolve(missionsRoot, slicePath));
|
|
269
|
+
if (hintMission) {
|
|
270
|
+
candidates.push(path.join(missionsRoot, hintMission, "slices", slicePath));
|
|
271
|
+
candidates.push(path.join(missionsRoot, hintMission, "closed", slicePath));
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
for (const candidate of candidates) {
|
|
275
|
+
if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory()) {
|
|
276
|
+
// Walk up to find the owning mission.
|
|
277
|
+
const owningMissionPath = findOwningMission(missionsRoot, candidate);
|
|
278
|
+
if (!owningMissionPath) {
|
|
279
|
+
throw new ScopeCliError({
|
|
280
|
+
fact: `Slice path "${slicePath}" resolved to ${candidate} but no parent mission was found.`,
|
|
281
|
+
consequence: "Cannot determine mission context for this slice.",
|
|
282
|
+
action: "Ensure the slice lives under <missionsRoot>/<mission>/{slices,closed}/.",
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
const mission = buildMissionInfo(missionsRoot, owningMissionPath);
|
|
286
|
+
const sliceRoot = path.dirname(candidate);
|
|
287
|
+
return buildSliceInfo(mission, sliceRoot, path.basename(candidate));
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
throw new ScopeCliError({
|
|
291
|
+
fact: `Slice "${slicePath}" not found.`,
|
|
292
|
+
consequence: "Command did not run.",
|
|
293
|
+
action: "Check the path. List slices in a mission with: rig scope slice ls --mission <name>",
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
function findOwningMission(missionsRoot, slicePath) {
|
|
297
|
+
let dir = path.dirname(slicePath);
|
|
298
|
+
while (dir.startsWith(missionsRoot) && dir !== missionsRoot) {
|
|
299
|
+
if (path.dirname(dir) === missionsRoot)
|
|
300
|
+
return dir;
|
|
301
|
+
dir = path.dirname(dir);
|
|
302
|
+
}
|
|
303
|
+
return null;
|
|
304
|
+
}
|
|
305
|
+
// ---------------------------------------------------------------------
|
|
306
|
+
// Auto-numbering
|
|
307
|
+
// ---------------------------------------------------------------------
|
|
308
|
+
/** Find the next available NN for a mission's slices/ folder. Scans
|
|
309
|
+
* BOTH slices/ AND closed/ so numbers are never reused (§3.2). */
|
|
310
|
+
export function nextSliceNN(missionAbsPath) {
|
|
311
|
+
let max = 0;
|
|
312
|
+
for (const subdir of ["slices", "closed"]) {
|
|
313
|
+
const root = path.join(missionAbsPath, subdir);
|
|
314
|
+
if (!fs.existsSync(root))
|
|
315
|
+
continue;
|
|
316
|
+
for (const entry of fs.readdirSync(root, { withFileTypes: true })) {
|
|
317
|
+
if (!entry.isDirectory())
|
|
318
|
+
continue;
|
|
319
|
+
const m = SLICE_DIRNAME_RE.exec(entry.name);
|
|
320
|
+
if (!m)
|
|
321
|
+
continue;
|
|
322
|
+
const n = Number(m[1]);
|
|
323
|
+
if (Number.isFinite(n) && n > max)
|
|
324
|
+
max = n;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return max + 1;
|
|
328
|
+
}
|
|
329
|
+
/** Mint or read the dot-ID for a mission. If the mission's README has
|
|
330
|
+
* an `id:` field, return it. Otherwise infer from the folder name
|
|
331
|
+
* (release-X.Y.Z → OPR.X.Y.Z; otherwise escape band). */
|
|
332
|
+
export function ensureMissionId(mission, missionsRoot) {
|
|
333
|
+
if (mission.id)
|
|
334
|
+
return mission.id;
|
|
335
|
+
// Try release-pattern first; if it matches, no peer scan needed.
|
|
336
|
+
try {
|
|
337
|
+
const id = inferMissionDotId(mission.name, null);
|
|
338
|
+
return id;
|
|
339
|
+
}
|
|
340
|
+
catch {
|
|
341
|
+
// Fall through to escape-band path.
|
|
342
|
+
}
|
|
343
|
+
const peers = listMissions(missionsRoot).filter((m) => m.name !== mission.name);
|
|
344
|
+
const ordinal = nextEscapeBandOrdinal(peers.map((p) => p.id));
|
|
345
|
+
return inferMissionDotId(mission.name, ordinal);
|
|
346
|
+
}
|
|
347
|
+
/** Same as ensureMissionId, but ALSO writes the inferred id back into
|
|
348
|
+
* the mission's README frontmatter when it was absent. Use this at
|
|
349
|
+
* every site that mints a child id (slice create / ship / move target)
|
|
350
|
+
* — per the convention's lazy-adoption rule: when a child is created
|
|
351
|
+
* under a pre-existing parent with no id, assign the parent's id
|
|
352
|
+
* on-demand at the same time. Narrow, single-parent, create-triggered;
|
|
353
|
+
* never mass-migration. */
|
|
354
|
+
export function ensureMissionIdPersisted(mission, missionsRoot) {
|
|
355
|
+
const id = ensureMissionId(mission, missionsRoot);
|
|
356
|
+
if (!mission.id && mission.readmePath) {
|
|
357
|
+
updateFrontmatter(mission.readmePath, { id });
|
|
358
|
+
// Reflect the write on the in-memory MissionInfo so subsequent
|
|
359
|
+
// callers in the same command don't re-mint a different ordinal.
|
|
360
|
+
mission.id = id;
|
|
361
|
+
}
|
|
362
|
+
return id;
|
|
363
|
+
}
|
|
364
|
+
// ---------------------------------------------------------------------
|
|
365
|
+
// Git move
|
|
366
|
+
// ---------------------------------------------------------------------
|
|
367
|
+
/** Return the git toplevel for a path, or null if not inside a repo. */
|
|
368
|
+
export function gitTopLevel(absPath) {
|
|
369
|
+
const dir = fs.existsSync(absPath) && fs.statSync(absPath).isDirectory() ? absPath : path.dirname(absPath);
|
|
370
|
+
try {
|
|
371
|
+
const out = execFileSync("git", ["-C", dir, "rev-parse", "--show-toplevel"], {
|
|
372
|
+
encoding: "utf8",
|
|
373
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
374
|
+
}).trim();
|
|
375
|
+
return out || null;
|
|
376
|
+
}
|
|
377
|
+
catch {
|
|
378
|
+
return null;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
/** Refuse to move a path with uncommitted local changes. Catches the
|
|
382
|
+
* "dirty working tree" risk in §11.1 / §3.4 — `git mv` would silently
|
|
383
|
+
* carry along the user's in-progress edits. */
|
|
384
|
+
export function assertCleanWorkingTree(repoRoot, relPath) {
|
|
385
|
+
let status;
|
|
386
|
+
try {
|
|
387
|
+
status = execFileSync("git", ["-C", repoRoot, "status", "--porcelain", "--", relPath], { encoding: "utf8", stdio: ["ignore", "pipe", "pipe"] });
|
|
388
|
+
}
|
|
389
|
+
catch (err) {
|
|
390
|
+
throw new ScopeCliError({
|
|
391
|
+
fact: `git status failed for ${relPath} in ${repoRoot}: ${err.message}`,
|
|
392
|
+
consequence: "Could not verify the slice's working-tree state. Move aborted.",
|
|
393
|
+
action: "Check the repository at " + repoRoot + " and retry.",
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
if (status.trim().length > 0) {
|
|
397
|
+
throw new ScopeCliError({
|
|
398
|
+
fact: `Working tree under ${relPath} has uncommitted changes:\n${status.trimEnd()}`,
|
|
399
|
+
consequence: "Refusing to git mv — your local edits would silently move with the slice.",
|
|
400
|
+
action: "Commit (git commit -m '...') or stash (git stash) and retry.",
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
/** Move a directory using `git mv` when inside a repo; fall back to
|
|
405
|
+
* `fs.renameSync` with a warning when not. Returns true if git was
|
|
406
|
+
* used. */
|
|
407
|
+
export function moveSlice(srcAbs, destAbs, opts = {}) {
|
|
408
|
+
if (!fs.existsSync(srcAbs)) {
|
|
409
|
+
throw new ScopeCliError({
|
|
410
|
+
fact: `Source path ${srcAbs} does not exist.`,
|
|
411
|
+
consequence: "Move did not run.",
|
|
412
|
+
action: "Verify the slice path and retry.",
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
if (fs.existsSync(destAbs)) {
|
|
416
|
+
throw new ScopeCliError({
|
|
417
|
+
fact: `Destination path ${destAbs} already exists.`,
|
|
418
|
+
consequence: "Refusing to overwrite an existing slice.",
|
|
419
|
+
action: "Pick a different destination, or remove the existing folder first.",
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
fs.mkdirSync(path.dirname(destAbs), { recursive: true });
|
|
423
|
+
const repoRoot = gitTopLevel(srcAbs);
|
|
424
|
+
if (!repoRoot) {
|
|
425
|
+
fs.renameSync(srcAbs, destAbs);
|
|
426
|
+
return { usedGit: false, repoRoot: null };
|
|
427
|
+
}
|
|
428
|
+
// Normalize symlinks (macOS /var/folders → /private/var/folders) so
|
|
429
|
+
// path.relative produces a path INSIDE the repo, not a ../../escape.
|
|
430
|
+
const realSrcAbs = fs.realpathSync(srcAbs);
|
|
431
|
+
const realDestParent = fs.realpathSync(path.dirname(destAbs));
|
|
432
|
+
const realDestAbs = path.join(realDestParent, path.basename(destAbs));
|
|
433
|
+
const srcRel = path.relative(repoRoot, realSrcAbs);
|
|
434
|
+
assertCleanWorkingTree(repoRoot, srcRel);
|
|
435
|
+
const destRel = path.relative(repoRoot, realDestAbs);
|
|
436
|
+
try {
|
|
437
|
+
execFileSync("git", ["-C", repoRoot, "mv", srcRel, destRel], {
|
|
438
|
+
encoding: "utf8",
|
|
439
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
catch (err) {
|
|
443
|
+
throw new ScopeCliError({
|
|
444
|
+
fact: `git mv ${srcRel} ${destRel} failed: ${err.message}`,
|
|
445
|
+
consequence: "Move aborted; source unchanged.",
|
|
446
|
+
action: "Inspect the repo state and retry.",
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
if (opts.commit) {
|
|
450
|
+
// Future hook; v0 doesn't auto-commit.
|
|
451
|
+
}
|
|
452
|
+
return { usedGit: true, repoRoot };
|
|
453
|
+
}
|
|
454
|
+
// ---------------------------------------------------------------------
|
|
455
|
+
// Misc
|
|
456
|
+
// ---------------------------------------------------------------------
|
|
457
|
+
export function todayDateISO() {
|
|
458
|
+
const d = new Date();
|
|
459
|
+
const y = d.getUTCFullYear();
|
|
460
|
+
const m = String(d.getUTCMonth() + 1).padStart(2, "0");
|
|
461
|
+
const day = String(d.getUTCDate()).padStart(2, "0");
|
|
462
|
+
return `${y}-${m}-${day}`;
|
|
463
|
+
}
|
|
464
|
+
export function pad2(n) {
|
|
465
|
+
return String(n).padStart(2, "0");
|
|
466
|
+
}
|
|
467
|
+
export { DEFAULT_PROJECT_PREFIX };
|
|
468
|
+
//# sourceMappingURL=scope-fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-fs.js","sourceRoot":"","sources":["../../../src/lib/scope/scope-fs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { MissionTemplateKind, SliceTemplateKind } from "./types.js";
|
|
2
|
+
export interface RenderOpts {
|
|
3
|
+
id: string;
|
|
4
|
+
slice_number?: string;
|
|
5
|
+
slug: string;
|
|
6
|
+
mission: string;
|
|
7
|
+
title: string;
|
|
8
|
+
created_date: string;
|
|
9
|
+
release_version?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function renderSliceTemplate(kind: SliceTemplateKind, opts: RenderOpts): string;
|
|
12
|
+
export declare function renderMissionTemplate(kind: MissionTemplateKind, opts: RenderOpts): string;
|
|
13
|
+
export interface MissionNotesRenderOpts {
|
|
14
|
+
mission_id: string;
|
|
15
|
+
mission_name: string;
|
|
16
|
+
created_date: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Resolve the MISSION_NOTES.md template absolute path.
|
|
20
|
+
* Env-var override > built-in bundled fallback (scope-templates/mission-notes.md).
|
|
21
|
+
* Returns the absolute path; the caller reads the file content.
|
|
22
|
+
*/
|
|
23
|
+
export declare function resolveMissionNotesTemplatePath(envValue?: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Render a MISSION_NOTES.md by reading the resolved template + substituting
|
|
26
|
+
* the three placeholders (mission_id / mission_name / created_date).
|
|
27
|
+
*
|
|
28
|
+
* Surfaces the resolution decision (env-override vs built-in) for callers
|
|
29
|
+
* that want to log or test the path.
|
|
30
|
+
*/
|
|
31
|
+
export declare function renderMissionNotesTemplate(opts: MissionNotesRenderOpts, envValue?: string): {
|
|
32
|
+
rendered: string;
|
|
33
|
+
resolvedFrom: "env" | "built-in";
|
|
34
|
+
absPath: string;
|
|
35
|
+
};
|
|
36
|
+
/** Convert a folder-slug to a title-cased display name. */
|
|
37
|
+
export declare function titleFromSlug(slug: string): string;
|
|
38
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/lib/scope/templates.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA+BzE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAaD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAIrF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAIzF;AAUD,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AASD;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAczE;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,sBAAsB,EAC5B,QAAQ,CAAC,EAAE,MAAM,GAChB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,KAAK,GAAG,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAUzE;AAED,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMlD"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
// release-0.3.2 slice 12 — template loader. Templates live as
|
|
2
|
+
// markdown files alongside the source so they can be edited like any
|
|
3
|
+
// other doc. The build copies them to dist/ via tsconfig
|
|
4
|
+
// rootDir/files behavior — but since .md isn't a .ts file, we read
|
|
5
|
+
// them directly via fileURLToPath to remain robust across local dev
|
|
6
|
+
// and the published package layout.
|
|
7
|
+
import fs from "node:fs";
|
|
8
|
+
import path from "node:path";
|
|
9
|
+
import { fileURLToPath } from "node:url";
|
|
10
|
+
import { ScopeCliError } from "./types.js";
|
|
11
|
+
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
12
|
+
/** Candidate template roots, in order: source tree (dev), dist (built).
|
|
13
|
+
* We resolve at call time so the first existing directory wins. */
|
|
14
|
+
function candidateRoots() {
|
|
15
|
+
return [
|
|
16
|
+
// Dev: packages/cli/src/lib/scope/ → ../scope-templates
|
|
17
|
+
path.resolve(here, "..", "scope-templates"),
|
|
18
|
+
// Built: dist/lib/scope/ → ../../src/lib/scope-templates (one level up further if
|
|
19
|
+
// dist lands at packages/cli/dist/lib/scope).
|
|
20
|
+
path.resolve(here, "..", "..", "lib", "scope-templates"),
|
|
21
|
+
// Fallback: source tree relative to compiled dist when source is co-shipped.
|
|
22
|
+
path.resolve(here, "..", "..", "..", "src", "lib", "scope-templates"),
|
|
23
|
+
];
|
|
24
|
+
}
|
|
25
|
+
function resolveTemplate(filename) {
|
|
26
|
+
for (const root of candidateRoots()) {
|
|
27
|
+
const candidate = path.join(root, filename);
|
|
28
|
+
if (fs.existsSync(candidate))
|
|
29
|
+
return candidate;
|
|
30
|
+
}
|
|
31
|
+
throw new ScopeCliError({
|
|
32
|
+
fact: `Template ${filename} could not be located.`,
|
|
33
|
+
consequence: "Cannot scaffold the new artifact.",
|
|
34
|
+
action: "Reinstall @openrig/cli, or run from a checkout with packages/cli/src/lib/scope-templates/ present.",
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function applyPlaceholders(content, opts) {
|
|
38
|
+
return content
|
|
39
|
+
.replace(/\{\{id\}\}/g, opts.id)
|
|
40
|
+
.replace(/\{\{slice_number\}\}/g, opts.slice_number ?? "")
|
|
41
|
+
.replace(/\{\{slug\}\}/g, opts.slug)
|
|
42
|
+
.replace(/\{\{mission\}\}/g, opts.mission)
|
|
43
|
+
.replace(/\{\{title\}\}/g, opts.title)
|
|
44
|
+
.replace(/\{\{created_date\}\}/g, opts.created_date)
|
|
45
|
+
.replace(/\{\{release_version\}\}/g, opts.release_version ?? "");
|
|
46
|
+
}
|
|
47
|
+
export function renderSliceTemplate(kind, opts) {
|
|
48
|
+
const filename = `${kind}.md`;
|
|
49
|
+
const raw = fs.readFileSync(resolveTemplate(filename), "utf8");
|
|
50
|
+
return applyPlaceholders(raw, opts);
|
|
51
|
+
}
|
|
52
|
+
export function renderMissionTemplate(kind, opts) {
|
|
53
|
+
const filename = kind === "release" ? "mission-release.md" : "mission-placeholder.md";
|
|
54
|
+
const raw = fs.readFileSync(resolveTemplate(filename), "utf8");
|
|
55
|
+
return applyPlaceholders(raw, opts);
|
|
56
|
+
}
|
|
57
|
+
function applyMissionNotesPlaceholders(content, opts) {
|
|
58
|
+
return content
|
|
59
|
+
.replace(/\{\{mission_id\}\}/g, opts.mission_id)
|
|
60
|
+
.replace(/\{\{mission_name\}\}/g, opts.mission_name)
|
|
61
|
+
.replace(/\{\{created_date\}\}/g, opts.created_date);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Resolve the MISSION_NOTES.md template absolute path.
|
|
65
|
+
* Env-var override > built-in bundled fallback (scope-templates/mission-notes.md).
|
|
66
|
+
* Returns the absolute path; the caller reads the file content.
|
|
67
|
+
*/
|
|
68
|
+
export function resolveMissionNotesTemplatePath(envValue) {
|
|
69
|
+
const fromEnv = envValue ?? process.env.OPENRIG_MISSION_NOTES_TEMPLATE_PATH;
|
|
70
|
+
if (fromEnv && fromEnv.trim().length > 0) {
|
|
71
|
+
const absPath = path.resolve(fromEnv.trim());
|
|
72
|
+
if (!fs.existsSync(absPath)) {
|
|
73
|
+
throw new ScopeCliError({
|
|
74
|
+
fact: `OPENRIG_MISSION_NOTES_TEMPLATE_PATH points at "${fromEnv}", which does not exist.`,
|
|
75
|
+
consequence: "MISSION_NOTES.md not scaffolded.",
|
|
76
|
+
action: "Set OPENRIG_MISSION_NOTES_TEMPLATE_PATH to an absolute path to a readable template file, or unset it to use the built-in bundled fallback.",
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return absPath;
|
|
80
|
+
}
|
|
81
|
+
return resolveTemplate("mission-notes.md");
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Render a MISSION_NOTES.md by reading the resolved template + substituting
|
|
85
|
+
* the three placeholders (mission_id / mission_name / created_date).
|
|
86
|
+
*
|
|
87
|
+
* Surfaces the resolution decision (env-override vs built-in) for callers
|
|
88
|
+
* that want to log or test the path.
|
|
89
|
+
*/
|
|
90
|
+
export function renderMissionNotesTemplate(opts, envValue) {
|
|
91
|
+
const envVal = envValue ?? process.env.OPENRIG_MISSION_NOTES_TEMPLATE_PATH;
|
|
92
|
+
const usedEnv = Boolean(envVal && envVal.trim().length > 0);
|
|
93
|
+
const absPath = resolveMissionNotesTemplatePath(envValue);
|
|
94
|
+
const raw = fs.readFileSync(absPath, "utf8");
|
|
95
|
+
return {
|
|
96
|
+
rendered: applyMissionNotesPlaceholders(raw, opts),
|
|
97
|
+
resolvedFrom: usedEnv ? "env" : "built-in",
|
|
98
|
+
absPath,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/** Convert a folder-slug to a title-cased display name. */
|
|
102
|
+
export function titleFromSlug(slug) {
|
|
103
|
+
return slug
|
|
104
|
+
.split(/[-_]/g)
|
|
105
|
+
.filter(Boolean)
|
|
106
|
+
.map((word) => word[0].toUpperCase() + word.slice(1))
|
|
107
|
+
.join(" ");
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/lib/scope/templates.ts"],"names":[],"mappings":"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"}
|