@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,165 @@
|
|
|
1
|
+
// release-0.3.2 slice 12 — dot-ID grammar per
|
|
2
|
+
// `openrig-work/conventions/scope-and-versioning/README.md` §1.
|
|
3
|
+
//
|
|
4
|
+
// Grammar (v0 single-project):
|
|
5
|
+
// project = <PFX> (2-3 letter; v0 hardcodes "OPR")
|
|
6
|
+
// mission = <PFX>.<ver>
|
|
7
|
+
// slice = <PFX>.<ver>.<n>
|
|
8
|
+
// sub = <PFX>.<ver>.<n>.<m>
|
|
9
|
+
//
|
|
10
|
+
// Version inference from mission folder name:
|
|
11
|
+
// release-X.Y[.Z] → "X.Y[.Z]" (release train)
|
|
12
|
+
// anything else → "99.0.<m>" escape band (uniform-numeric;
|
|
13
|
+
// NO alpha — convention §1 explicit)
|
|
14
|
+
//
|
|
15
|
+
// The escape-band <m> is assigned by scanning peer non-release missions
|
|
16
|
+
// for an existing id and picking max+1. Releases keep their semver.
|
|
17
|
+
import { ScopeCliError } from "./types.js";
|
|
18
|
+
/** Default project prefix for the OpenRig single-project workspace.
|
|
19
|
+
* Multi-project work waits for a real second project (convention §1). */
|
|
20
|
+
export const DEFAULT_PROJECT_PREFIX = "OPR";
|
|
21
|
+
const RELEASE_NAME_RE = /^release-(\d+\.\d+(?:\.\d+)?)$/;
|
|
22
|
+
// Strict positional grammar: every segment is a number except for the
|
|
23
|
+
// 2-3 letter project prefix at position 0. Accepts 2-5 numeric
|
|
24
|
+
// segments after the prefix (mission has 2-3, slice has 3-4, sub-slice
|
|
25
|
+
// has 4-5). Tier-aware parse helpers below split version/n/m correctly.
|
|
26
|
+
const DOT_ID_RE = /^([A-Z]{2,3})\.(\d+(?:\.\d+){1,4})$/;
|
|
27
|
+
/** Parse a dot-ID string into structured parts; returns null when the
|
|
28
|
+
* string doesn't conform to the §1 positional grammar. When `tier`
|
|
29
|
+
* is supplied, the trailing segments are peeled off into `n` (slice)
|
|
30
|
+
* or `n` + `m` (sub-slice). With no tier, all numeric segments are
|
|
31
|
+
* returned as `version` for backwards compatibility. */
|
|
32
|
+
export function parseDotId(raw, tier) {
|
|
33
|
+
if (typeof raw !== "string")
|
|
34
|
+
return null;
|
|
35
|
+
const trimmed = raw.trim();
|
|
36
|
+
const m = DOT_ID_RE.exec(trimmed);
|
|
37
|
+
if (!m)
|
|
38
|
+
return null;
|
|
39
|
+
const project = m[1];
|
|
40
|
+
const segments = m[2].split(".");
|
|
41
|
+
if (!tier) {
|
|
42
|
+
return { project, version: segments.join("."), n: undefined, m: undefined };
|
|
43
|
+
}
|
|
44
|
+
if (tier === "mission") {
|
|
45
|
+
return { project, version: segments.join("."), n: undefined, m: undefined };
|
|
46
|
+
}
|
|
47
|
+
if (tier === "slice") {
|
|
48
|
+
if (segments.length < 3)
|
|
49
|
+
return null; // slice = ver(>=2) + n
|
|
50
|
+
const verSegs = segments.slice(0, -1);
|
|
51
|
+
const nSeg = segments[segments.length - 1];
|
|
52
|
+
return { project, version: verSegs.join("."), n: Number(nSeg), m: undefined };
|
|
53
|
+
}
|
|
54
|
+
// sub-slice
|
|
55
|
+
if (segments.length < 4)
|
|
56
|
+
return null;
|
|
57
|
+
const verSegs = segments.slice(0, -2);
|
|
58
|
+
const nSeg = segments[segments.length - 2];
|
|
59
|
+
const mSeg = segments[segments.length - 1];
|
|
60
|
+
return { project, version: verSegs.join("."), n: Number(nSeg), m: Number(mSeg) };
|
|
61
|
+
}
|
|
62
|
+
/** Validate a mission-ver segments array against the §1 escape-band
|
|
63
|
+
* rule. The convention defines the non-release escape band as
|
|
64
|
+
* `<PFX>.99.0.<n>` — the `0` after `99` is FIXED. A version like
|
|
65
|
+
* `99.7.8` does NOT conform. Shared between isMissionDotId and the
|
|
66
|
+
* parent-version check inside isSliceDotId so both surfaces stay in
|
|
67
|
+
* lockstep. */
|
|
68
|
+
function isValidMissionVerSegments(segs) {
|
|
69
|
+
if (segs.length < 2 || segs.length > 3)
|
|
70
|
+
return false;
|
|
71
|
+
if (segs[0] === "99") {
|
|
72
|
+
// Escape band: exactly [99, "0", "<ordinal>"]. The `0` segment is
|
|
73
|
+
// fixed; `<ordinal>` must be a non-empty numeric string.
|
|
74
|
+
return segs.length === 3 && segs[1] === "0" && /^\d+$/.test(segs[2] ?? "");
|
|
75
|
+
}
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
/** Depth-based tier discriminator. Per §1 the positional grammar
|
|
79
|
+
* is fixed:
|
|
80
|
+
* mission = <PFX>.<ver> (ver = 2-3 numeric segments;
|
|
81
|
+
* escape band is exactly 99.0.n)
|
|
82
|
+
* slice = <PFX>.<ver>.<n> (3-4 numeric segments)
|
|
83
|
+
* sub-slice = <PFX>.<ver>.<n>.<m> (4-5 numeric segments)
|
|
84
|
+
* Where a mission shape OVERLAPS with a slice shape (e.g. release
|
|
85
|
+
* X.Y mission has 2 segments; release X.Y.Z mission has 3 segments
|
|
86
|
+
* which is also the slice shape for release X.Y missions) the tier
|
|
87
|
+
* is resolved by depth: mission caps at 3 numeric segments; slice
|
|
88
|
+
* always has 3-4; sub-slice has 4-5. Escape band is fully unambiguous
|
|
89
|
+
* because §1 fixes both the 99 marker AND the 0 segment that follows. */
|
|
90
|
+
export function isMissionDotId(raw) {
|
|
91
|
+
if (typeof raw !== "string")
|
|
92
|
+
return false;
|
|
93
|
+
const parsed = parseDotId(raw, "mission");
|
|
94
|
+
if (!parsed)
|
|
95
|
+
return false;
|
|
96
|
+
return isValidMissionVerSegments(parsed.version.split("."));
|
|
97
|
+
}
|
|
98
|
+
export function isSliceDotId(raw) {
|
|
99
|
+
if (typeof raw !== "string")
|
|
100
|
+
return false;
|
|
101
|
+
const parsed = parseDotId(raw, "slice");
|
|
102
|
+
if (!parsed)
|
|
103
|
+
return false;
|
|
104
|
+
// Slice = mission-ver + 1 ordinal. Parent ver must itself be a
|
|
105
|
+
// valid mission shape (including the escape-band exact-[99.0.n]
|
|
106
|
+
// rule — a parent like 99.7.8 is not a real mission).
|
|
107
|
+
return isValidMissionVerSegments(parsed.version.split("."));
|
|
108
|
+
}
|
|
109
|
+
/** Render a DotId back to its canonical dot-string. */
|
|
110
|
+
export function formatDotId(id) {
|
|
111
|
+
const parts = [id.project, id.version];
|
|
112
|
+
if (id.n !== undefined)
|
|
113
|
+
parts.push(String(id.n));
|
|
114
|
+
if (id.m !== undefined)
|
|
115
|
+
parts.push(String(id.m));
|
|
116
|
+
return parts.join(".");
|
|
117
|
+
}
|
|
118
|
+
/** Compose a slice ID by appending an ordinal to a parent mission ID. */
|
|
119
|
+
export function sliceIdFromMission(missionId, n) {
|
|
120
|
+
return `${missionId}.${n}`;
|
|
121
|
+
}
|
|
122
|
+
/** Infer the (project, version) pair from a mission folder name when
|
|
123
|
+
* no explicit id is supplied. Release missions use their semver; any
|
|
124
|
+
* other name falls into the escape band where the caller supplies the
|
|
125
|
+
* next ordinal via the second arg. */
|
|
126
|
+
export function inferMissionDotId(missionFolderName, escapeBandOrdinal, projectPrefix = DEFAULT_PROJECT_PREFIX) {
|
|
127
|
+
const releaseMatch = RELEASE_NAME_RE.exec(missionFolderName);
|
|
128
|
+
if (releaseMatch) {
|
|
129
|
+
return `${projectPrefix}.${releaseMatch[1]}`;
|
|
130
|
+
}
|
|
131
|
+
if (escapeBandOrdinal === null) {
|
|
132
|
+
throw new ScopeCliError({
|
|
133
|
+
fact: `Mission "${missionFolderName}" doesn't match the release-X.Y[.Z] pattern and no escape-band ordinal was supplied.`,
|
|
134
|
+
consequence: "No dot-ID could be inferred for this mission.",
|
|
135
|
+
action: "Pass an explicit ordinal, or rename the mission to release-X.Y.Z, or supply --id on the CLI.",
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
return `${projectPrefix}.99.0.${escapeBandOrdinal}`;
|
|
139
|
+
}
|
|
140
|
+
/** Pick the next escape-band ordinal by scanning peer mission IDs.
|
|
141
|
+
* Looks for `<PFX>.99.0.<m>` shapes and returns max(m)+1, starting
|
|
142
|
+
* at 1 when no peer exists. */
|
|
143
|
+
export function nextEscapeBandOrdinal(existingIds, projectPrefix = DEFAULT_PROJECT_PREFIX) {
|
|
144
|
+
let max = 0;
|
|
145
|
+
const re = new RegExp(`^${projectPrefix}\\.99\\.0\\.(\\d+)$`);
|
|
146
|
+
for (const id of existingIds) {
|
|
147
|
+
if (!id)
|
|
148
|
+
continue;
|
|
149
|
+
const m = re.exec(id);
|
|
150
|
+
if (!m)
|
|
151
|
+
continue;
|
|
152
|
+
const n = Number(m[1]);
|
|
153
|
+
if (Number.isFinite(n) && n > max)
|
|
154
|
+
max = n;
|
|
155
|
+
}
|
|
156
|
+
return max + 1;
|
|
157
|
+
}
|
|
158
|
+
/** Does this candidate string parse as a valid §1 dot-ID at ANY
|
|
159
|
+
* tier? Prefer the tier-specific isMissionDotId/isSliceDotId at use
|
|
160
|
+
* sites where the tier is known — depth alone doesn't disambiguate
|
|
161
|
+
* mission vs slice for release IDs with overlapping shapes. */
|
|
162
|
+
export function isConformantDotId(raw) {
|
|
163
|
+
return typeof raw === "string" && parseDotId(raw) !== null;
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=dot-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dot-id.js","sourceRoot":"","sources":["../../../src/lib/scope/dot-id.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { MissionInfo, SliceInfo, SliceState } from "./types.js";
|
|
2
|
+
import { DEFAULT_PROJECT_PREFIX } from "./dot-id.js";
|
|
3
|
+
/** Split a markdown file into [frontmatter, body]. Returns `[{}, content]`
|
|
4
|
+
* when no frontmatter delimiter is present. */
|
|
5
|
+
export declare function splitFrontmatter(content: string): {
|
|
6
|
+
frontmatter: Record<string, unknown>;
|
|
7
|
+
body: string;
|
|
8
|
+
};
|
|
9
|
+
/** Re-stitch frontmatter + body into a single markdown string. */
|
|
10
|
+
export declare function joinFrontmatter(frontmatter: Record<string, unknown>, body: string): string;
|
|
11
|
+
/** Read + parse frontmatter from a markdown file. Returns `{}` if the
|
|
12
|
+
* file is missing OR has no frontmatter (graceful for placeholder
|
|
13
|
+
* missions that pre-date the convention). */
|
|
14
|
+
export declare function readFrontmatter(absPath: string): Record<string, unknown>;
|
|
15
|
+
/** Update specific keys in a markdown file's frontmatter. Existing
|
|
16
|
+
* unknown keys are preserved. Generates minimal frontmatter when
|
|
17
|
+
* absent. */
|
|
18
|
+
export declare function updateFrontmatter(absPath: string, updates: Record<string, unknown>): void;
|
|
19
|
+
/** Locate the missions root for the working substrate. Resolution
|
|
20
|
+
* order:
|
|
21
|
+
* 1. Explicit override (env or arg)
|
|
22
|
+
* 2. $OPENRIG_WORK_ROOT/missions
|
|
23
|
+
* 3. Search up from cwd for a `missions/` folder
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveMissionsRoot(opts?: {
|
|
26
|
+
override?: string | null;
|
|
27
|
+
cwd?: string;
|
|
28
|
+
}): string;
|
|
29
|
+
/** List mission folders under the missions root. A mission is any
|
|
30
|
+
* top-level folder containing a README.md (per IMPLEMENTATION-PRD
|
|
31
|
+
* §2.1 / HG-8). Directories without a README.md are skipped — they
|
|
32
|
+
* represent scratch/junk, not declared missions. */
|
|
33
|
+
export declare function listMissions(missionsRoot: string): MissionInfo[];
|
|
34
|
+
/** Resolve a mission by name OR path relative to the missions root.
|
|
35
|
+
* Throws ScopeCliError on miss OR when the directory exists but
|
|
36
|
+
* lacks a README.md (consistent with listMissions' README gate per
|
|
37
|
+
* PRD §2.1 / HG-8 — README-less dirs are scratch/junk, not declared
|
|
38
|
+
* missions, so mutation commands must not silently target them). */
|
|
39
|
+
export declare function findMission(missionsRoot: string, identifier: string): MissionInfo;
|
|
40
|
+
export declare function listSlices(mission: MissionInfo, state: SliceState): SliceInfo[];
|
|
41
|
+
/** Resolve a slice path (absolute, relative-to-substrate, or
|
|
42
|
+
* relative-to-mission) into a SliceInfo. */
|
|
43
|
+
export declare function findSlice(missionsRoot: string, slicePath: string, hintMission?: string | null): SliceInfo;
|
|
44
|
+
/** Find the next available NN for a mission's slices/ folder. Scans
|
|
45
|
+
* BOTH slices/ AND closed/ so numbers are never reused (§3.2). */
|
|
46
|
+
export declare function nextSliceNN(missionAbsPath: string): number;
|
|
47
|
+
/** Mint or read the dot-ID for a mission. If the mission's README has
|
|
48
|
+
* an `id:` field, return it. Otherwise infer from the folder name
|
|
49
|
+
* (release-X.Y.Z → OPR.X.Y.Z; otherwise escape band). */
|
|
50
|
+
export declare function ensureMissionId(mission: MissionInfo, missionsRoot: string): string;
|
|
51
|
+
/** Same as ensureMissionId, but ALSO writes the inferred id back into
|
|
52
|
+
* the mission's README frontmatter when it was absent. Use this at
|
|
53
|
+
* every site that mints a child id (slice create / ship / move target)
|
|
54
|
+
* — per the convention's lazy-adoption rule: when a child is created
|
|
55
|
+
* under a pre-existing parent with no id, assign the parent's id
|
|
56
|
+
* on-demand at the same time. Narrow, single-parent, create-triggered;
|
|
57
|
+
* never mass-migration. */
|
|
58
|
+
export declare function ensureMissionIdPersisted(mission: MissionInfo, missionsRoot: string): string;
|
|
59
|
+
/** Return the git toplevel for a path, or null if not inside a repo. */
|
|
60
|
+
export declare function gitTopLevel(absPath: string): string | null;
|
|
61
|
+
/** Refuse to move a path with uncommitted local changes. Catches the
|
|
62
|
+
* "dirty working tree" risk in §11.1 / §3.4 — `git mv` would silently
|
|
63
|
+
* carry along the user's in-progress edits. */
|
|
64
|
+
export declare function assertCleanWorkingTree(repoRoot: string, relPath: string): void;
|
|
65
|
+
/** Move a directory using `git mv` when inside a repo; fall back to
|
|
66
|
+
* `fs.renameSync` with a warning when not. Returns true if git was
|
|
67
|
+
* used. */
|
|
68
|
+
export declare function moveSlice(srcAbs: string, destAbs: string, opts?: {
|
|
69
|
+
/** Stage the move (default true). git mv stages by default; we
|
|
70
|
+
* preserve that semantic. */
|
|
71
|
+
commit?: boolean;
|
|
72
|
+
}): {
|
|
73
|
+
usedGit: boolean;
|
|
74
|
+
repoRoot: string | null;
|
|
75
|
+
};
|
|
76
|
+
export declare function todayDateISO(): string;
|
|
77
|
+
export declare function pad2(n: number): string;
|
|
78
|
+
export { DEFAULT_PROJECT_PREFIX };
|
|
79
|
+
//# sourceMappingURL=scope-fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-fs.d.ts","sourceRoot":"","sources":["../../../src/lib/scope/scope-fs.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,sBAAsB,EAGvB,MAAM,aAAa,CAAC;AASrB;gDACgD;AAChD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IACjD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;CACd,CAgBA;AAaD,kEAAkE;AAClE,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,IAAI,EAAE,MAAM,GACX,MAAM,CAIR;AAED;;8CAE8C;AAC9C,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMxE;AAED;;cAEc;AACd,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,IAAI,CAKN;AAMD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,GAAE;IACxC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;CACT,GAAG,MAAM,CAsBd;AAED;;;qDAGqD;AACrD,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW,EAAE,CA6BhE;AAcD;;;;qEAIqE;AACrE,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,CAuBjF;AAqBD,wBAAgB,UAAU,CACxB,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,UAAU,GAChB,SAAS,EAAE,CA8Bb;AAyBD;6CAC6C;AAC7C,wBAAgB,SAAS,CACvB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAC1B,SAAS,CAiCX;AAeD;mEACmE;AACnE,wBAAgB,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAc1D;AAED;;0DAE0D;AAC1D,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,MAAM,GACnB,MAAM,CAYR;AAED;;;;;;4BAM4B;AAC5B,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,MAAM,GACnB,MAAM,CASR;AAMD,wEAAwE;AACxE,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAW1D;AAED;;gDAEgD;AAChD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAsB9E;AAED;;YAEY;AACZ,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;IAC/D;kCAC8B;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;CACb,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CA6CrD;AAMD,wBAAgB,YAAY,IAAI,MAAM,CAMrC;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtC;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
|