@guiho/runx 0.2.6 → 0.4.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 (92) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/DOCS.md +128 -109
  3. package/README.md +58 -58
  4. package/devops/build-binaries.ts +44 -62
  5. package/devops/devops.xdocs.md +8 -5
  6. package/devops/install.ps1 +182 -152
  7. package/devops/install.sh +197 -262
  8. package/devops/installers.spec.ts +31 -0
  9. package/devops/verify-release-assets.ts +17 -0
  10. package/docs/decisions/decisions.xdocs.md +4 -0
  11. package/docs/decisions/interactive-init-manifest.md +187 -0
  12. package/docs/docs.xdocs.md +3 -1
  13. package/docs/plans/interactive-init-manifest.md +177 -0
  14. package/docs/plans/plans.xdocs.md +11 -0
  15. package/docs/plans/rfc-0034-cli-compliance-migration.md +586 -0
  16. package/docs/plans/upgrade-reliability-implementation.md +95 -0
  17. package/docs/reviews/implementation/implementation.xdocs.md +6 -0
  18. package/docs/reviews/implementation/interactive-init-manifest-review.md +69 -0
  19. package/docs/reviews/implementation/rfc-0034-cli-compliance-migration-review.md +59 -0
  20. package/docs/reviews/plans/interactive-init-manifest-review.md +82 -0
  21. package/docs/reviews/plans/plans.xdocs.md +10 -0
  22. package/docs/reviews/plans/rfc-0034-cli-compliance-migration-review.md +80 -0
  23. package/docs/reviews/plans/upgrade-reliability-implementation-review.md +65 -0
  24. package/docs/superpowers/specs/2026-07-15-upgrade-reliability-design.md +662 -0
  25. package/docs/superpowers/specs/specs.xdocs.md +24 -0
  26. package/docs/superpowers/superpowers.xdocs.md +21 -0
  27. package/docs/todo/rfc-0034-cli-compliance-migration-implementation.md +58 -0
  28. package/docs/todo/rfc-0034-cli-compliance-migration.md +151 -0
  29. package/docs/todo/todo.xdocs.md +6 -2
  30. package/docs/validation/interactive-init-manifest.md +79 -0
  31. package/docs/validation/rfc-0034-cli-compliance-migration.md +67 -0
  32. package/docs/validation/upgrade-reliability.md +124 -0
  33. package/docs/validation/validation.xdocs.md +9 -0
  34. package/library/agents.d.ts +28 -4
  35. package/library/agents.d.ts.map +1 -1
  36. package/library/agents.js +143 -41
  37. package/library/cli.d.ts.map +1 -1
  38. package/library/cli.js +297 -317
  39. package/library/configuration.d.ts +57 -0
  40. package/library/configuration.d.ts.map +1 -0
  41. package/library/configuration.js +111 -0
  42. package/library/embedded-resources.d.ts +6 -1
  43. package/library/embedded-resources.d.ts.map +1 -1
  44. package/library/embedded-resources.js +10 -4
  45. package/library/executor.d.ts +5 -1
  46. package/library/executor.d.ts.map +1 -1
  47. package/library/executor.js +10 -10
  48. package/library/help.d.ts +8 -4
  49. package/library/help.d.ts.map +1 -1
  50. package/library/help.js +70 -42
  51. package/library/init.d.ts +18 -0
  52. package/library/init.d.ts.map +1 -0
  53. package/library/init.js +43 -0
  54. package/library/manifest.d.ts +4 -40
  55. package/library/manifest.d.ts.map +1 -1
  56. package/library/manifest.js +4 -112
  57. package/library/path-utils.d.ts +13 -0
  58. package/library/path-utils.d.ts.map +1 -0
  59. package/library/path-utils.js +82 -0
  60. package/library/recovery.d.ts +7 -0
  61. package/library/recovery.d.ts.map +1 -0
  62. package/library/recovery.js +23 -0
  63. package/library/release-catalog.d.ts +32 -0
  64. package/library/release-catalog.d.ts.map +1 -0
  65. package/library/release-catalog.js +124 -0
  66. package/library/self-management.d.ts +24 -4
  67. package/library/self-management.d.ts.map +1 -1
  68. package/library/self-management.js +279 -99
  69. package/library/storage.d.ts +13 -0
  70. package/library/storage.d.ts.map +1 -0
  71. package/library/storage.js +38 -0
  72. package/library/types.d.ts +11 -16
  73. package/library/types.d.ts.map +1 -1
  74. package/library/types.js +3 -0
  75. package/library/update-cache.d.ts +21 -0
  76. package/library/update-cache.d.ts.map +1 -0
  77. package/library/update-cache.js +68 -0
  78. package/library/upgrade-reporting.d.ts +11 -0
  79. package/library/upgrade-reporting.d.ts.map +1 -0
  80. package/library/upgrade-reporting.js +67 -0
  81. package/library/upgrade-types.d.ts +72 -0
  82. package/library/upgrade-types.d.ts.map +1 -0
  83. package/library/upgrade-types.js +3 -0
  84. package/package.json +6 -3
  85. package/scripts/runx-bin.mjs +49 -0
  86. package/scripts/runx-bin.spec.ts +62 -0
  87. package/scripts/scripts.xdocs.md +3 -3
  88. package/skills/guiho-s-runx/SKILL.md +64 -59
  89. package/skills/guiho-s-runx/guiho-s-runx.xdocs.md +7 -4
  90. package/skills/skills.xdocs.md +1 -1
  91. package/docs/todo/implement-runx-alpha.md +0 -36
  92. package/scripts/runx-bin.ts +0 -24
@@ -0,0 +1,187 @@
1
+ ---
2
+ name: RunX Interactive Init Manifest
3
+ purpose: Preserve the accepted manifest structure and initialization behavior for runx init.
4
+ description: Defines the Semantic Versioning manifest field, mandatory public group, configurable scripts directory, and empty interactive initialization contract.
5
+ created: 2026-07-14
6
+ flags:
7
+ - accepted
8
+ - decision
9
+ tags:
10
+ - decisions
11
+ - cli
12
+ - manifest
13
+ keywords:
14
+ - runx init
15
+ - runx.yaml
16
+ - semantic versioning
17
+ - public group
18
+ - scripts directory
19
+ owner: runx-decisions
20
+ ---
21
+
22
+ # RunX Interactive Init Manifest
23
+
24
+ ## Status
25
+
26
+ Accepted by the project owner on 2026-07-14.
27
+
28
+ ## Context
29
+
30
+ RunX needs an interactive `runx init` command so a project can establish its
31
+ single `runx.yaml` command catalog before any commands exist. The repository
32
+ already defines groups and documented commands as the core catalog model. The
33
+ initializer must preserve that model without inventing framework-specific
34
+ commands, creating a second configuration file, or forcing a placeholder
35
+ command into the catalog.
36
+
37
+ Projects may later store executable Bash, PowerShell, or other script files in
38
+ a manifest-owned scripts directory. The manifest must identify that directory
39
+ so agents and developers use one predictable location when adding scripts.
40
+
41
+ ## Decision
42
+
43
+ ### Initialized manifest
44
+
45
+ `runx init` creates this shape, using the current directory name as the default
46
+ project name:
47
+
48
+ ```yaml
49
+ version: "1.0.0"
50
+
51
+ project:
52
+ name: my-project
53
+
54
+ scripts:
55
+ directory: scripts
56
+
57
+ groups:
58
+ public:
59
+ summary: Default public project commands.
60
+
61
+ commands: []
62
+ ```
63
+
64
+ The initializer creates only `runx.yaml`. It does not create an empty `scripts`
65
+ directory because the directory is created when the first script is written.
66
+
67
+ ### Manifest version
68
+
69
+ - `version` is a valid Semantic Versioning 2.0.0 string with a
70
+ `MAJOR.MINOR.PATCH` core and optional prerelease or build metadata.
71
+ - The first supported manifest contract is `"1.0.0"`.
72
+ - RunX accepts manifest versions whose major version is `1` and rejects
73
+ unsupported major versions.
74
+ - Numeric `version: 1` manifests are invalid. RunX is still under development
75
+ and has no deployed numeric-version compatibility requirement.
76
+ - Future backward-incompatible manifest changes require a major version change.
77
+
78
+ ### Scripts directory
79
+
80
+ - Every manifest contains `scripts.directory`; it configures the project script
81
+ location.
82
+ - The initializer's default value is `scripts` relative to the directory
83
+ containing `runx.yaml`.
84
+ - The path must remain inside the manifest directory and cannot escape through
85
+ an absolute path or parent traversal.
86
+ - Existing and future command strings may invoke any suitable script type from
87
+ this directory; RunX remains language-agnostic.
88
+ - The manifest command entry is the script descriptor. No sidecar RunX config
89
+ or per-script descriptor file is introduced.
90
+
91
+ ### Groups and commands
92
+
93
+ - `groups` is a first-class catalog concept.
94
+ - Every manifest contains a `public` group, analogous to PostgreSQL's default
95
+ `public` schema.
96
+ - Additional groups may organize commands by domain or responsibility.
97
+ - Every command explicitly names an existing group. Missing and unknown group
98
+ references are invalid.
99
+ - Authoring workflows place a new command in `public` unless the user requests
100
+ or selects another group, but the stored command still contains
101
+ `group: public` explicitly.
102
+ - An initialized catalog may contain no commands. Once present, every command
103
+ retains the required `uid`, `id`, `group`, `summary`, `description`, and
104
+ executable `command` fields.
105
+
106
+ ### Interactive behavior
107
+
108
+ - `runx init` is a first-class Citty command that never requires an existing
109
+ manifest.
110
+ - The interactive flow collects or confirms the project name and scripts
111
+ directory, renders a YAML preview, and requests confirmation before writing.
112
+ - The interface should use a polished terminal presentation with clear
113
+ progress, validation, cancellation, and success states.
114
+ - No framework-specific templates or automatic package-script imports are
115
+ offered.
116
+ - An existing `runx.yaml` is never overwritten without explicit confirmation.
117
+ - Cancellation leaves no partial file, and non-interactive invocation fails
118
+ clearly instead of hanging.
119
+
120
+ ## Alternatives Considered
121
+
122
+ ### Require a first command during initialization
123
+
124
+ Rejected. Initialization establishes the catalog so commands can be added later
125
+ from explicit developer requests. A fabricated starter command would make the
126
+ manifest less truthful.
127
+
128
+ ### Offer framework-specific templates or scan package scripts
129
+
130
+ Rejected. RunX is language-agnostic, and the project owner explicitly excluded
131
+ framework-specific starter templates from the initializer.
132
+
133
+ ### Keep numeric `version: 1` compatibility
134
+
135
+ Rejected. RunX has not been used outside development, so there is no legacy
136
+ manifest population to migrate. Supporting two version shapes would add
137
+ unnecessary schema and documentation complexity.
138
+
139
+ ### Store the scripts directory in a separate config file
140
+
141
+ Rejected. `runx.yaml` remains the single source of truth for the command
142
+ catalog and its script location.
143
+
144
+ ### Create the scripts directory eagerly
145
+
146
+ Rejected for initialization. An empty directory is not useful to the catalog
147
+ and is not preserved by Git. The directory should be created with the first
148
+ real script.
149
+
150
+ ## Consequences
151
+
152
+ - The manifest TypeBox schema must accept only supported Semantic Versioning
153
+ strings, require `scripts.directory`, and allow an empty command array.
154
+ - Semantic validation must require the `public` group and continue requiring
155
+ every command to reference a declared group.
156
+ - Script-directory validation must enforce a relative path within the manifest
157
+ root.
158
+ - Existing fixtures and documentation using numeric `version: 1` must move to
159
+ `version: "1.0.0"` and include `public`.
160
+ - Listing and checking an empty initialized manifest must succeed without
161
+ attempting command execution.
162
+ - The initializer needs an isolated prompt boundary so interactive behavior can
163
+ be tested without depending on a real terminal.
164
+ - The bundled agent skill update is intentionally deferred to the process that
165
+ delivers the complete agent-integration request.
166
+
167
+ ## Reversal Or Revisit Conditions
168
+
169
+ Revisit this decision only if real-world manifest migration requires a
170
+ compatibility policy, the command catalog needs multiple script roots, or a
171
+ future major manifest version replaces the group model. Such a change must be
172
+ recorded as a new decision and reflected in the manifest's major version.
173
+
174
+ ## Follow-up Work
175
+
176
+ - Implement the manifest schema and semantic validation changes.
177
+ - Implement and test the interactive `runx init` command.
178
+ - Update canonical CLI and manifest documentation.
179
+ - Update XDocs descriptors for every changed module or companion document.
180
+ - Leave agent-skill content changes for the complete agent-integration work.
181
+
182
+ ## References
183
+
184
+ - [Alpha boundaries](./alpha-boundaries.md)
185
+ - [Alpha command-catalog requirements](../requirements/alpha-command-catalog.md)
186
+ - [CLI architecture](../architecture/cli-architecture.md)
187
+ - [GitHub issue #10](https://github.com/CGuiho/runx/issues/10)
@@ -8,6 +8,7 @@ children:
8
8
  - runx-decisions
9
9
  - runx-plans
10
10
  - runx-reviews
11
+ - runx-superpowers
11
12
  - runx-todo
12
13
  - runx-validation
13
14
  files: {}
@@ -22,4 +23,5 @@ flags: []
22
23
  status: stable
23
24
  ---
24
25
 
25
- The documentation tree records the approved alpha direction and its verification evidence.
26
+ The documentation tree records the approved product direction, executable
27
+ design specifications, and verification evidence.
@@ -0,0 +1,177 @@
1
+ ---
2
+ name: RunX Interactive Init Manifest Plan
3
+ purpose: Sequence implementation of the accepted runx init workflow and manifest contract.
4
+ description: Defines the schema, interactive terminal UI, validation, documentation, and pull-request work for RunX initialization.
5
+ created: 2026-07-14
6
+ flags:
7
+ - approved
8
+ tags:
9
+ - plans
10
+ - cli
11
+ - manifest
12
+ keywords:
13
+ - runx init
14
+ - runx.yaml
15
+ - semantic versioning
16
+ - public group
17
+ - scripts directory
18
+ owner: runx-plans
19
+ ---
20
+
21
+ # RunX Interactive Init Manifest Plan
22
+
23
+ ## Sources
24
+
25
+ - [Interactive Init Manifest Decision](../decisions/interactive-init-manifest.md)
26
+ - [Alpha Command Catalog Requirements](../requirements/alpha-command-catalog.md)
27
+ - [CLI Architecture](../architecture/cli-architecture.md)
28
+ - GitHub issue [#10](https://github.com/CGuiho/runx/issues/10)
29
+
30
+ ## Unit 1: Establish the Manifest Contract
31
+
32
+ - Goal: Make the current manifest validator enforce the accepted `1.x.x`
33
+ Semantic Versioning, scripts directory, public group, and empty catalog
34
+ contract.
35
+ - Owner: `C:\GUIHO\runx`.
36
+ - Dependencies: Accepted interactive-init decision.
37
+ - Files:
38
+ - `source/manifest.ts`
39
+ - `source/types.ts` when TypeScript inference exposes the new manifest shape
40
+ - `source/guiho-runx.spec.ts`
41
+ - `source/cli.spec.ts` fixtures that construct manifests
42
+ - Behavior:
43
+ - Replace numeric `version: 1` with a Semantic Versioning string and accept
44
+ only supported major version `1`.
45
+ - Require `scripts.directory` as a non-empty relative path inside the
46
+ manifest root.
47
+ - Require the `public` group with a non-empty summary.
48
+ - Permit an empty `commands` array while keeping every populated command
49
+ explicit about its existing group.
50
+ - Preserve strict unknown-property rejection and existing selector and
51
+ execution safety behavior.
52
+ - Data, auth, permissions, and cache: Local YAML contract only. No remote data,
53
+ authentication, authorization, cache, or secret changes.
54
+ - Tests:
55
+ - Accept `"1.0.0"` and prerelease/build SemVer forms with major `1`.
56
+ - Reject numeric versions, malformed SemVer, unsupported major versions,
57
+ missing scripts configuration, escaping script paths, missing public, and
58
+ commands that name unknown groups.
59
+ - Prove empty initialized catalogs check and list without execution.
60
+ - Acceptance: `readManifest()` returns a strict manifest with `scripts` and
61
+ `public`, and invalid configurations fail with actionable `RunXError`
62
+ messages.
63
+ - Stop conditions: Stop if SemVer support would require a migration policy,
64
+ scripts need more than one root, or the change weakens command safety.
65
+
66
+ ## Unit 2: Implement the Interactive Initializer
67
+
68
+ - Goal: Add a beautiful, cancellable `runx init` Citty command that creates a
69
+ valid empty `runx.yaml` without ever executing a configured command.
70
+ - Dependencies: Unit 1.
71
+ - Files:
72
+ - `package.json`
73
+ - `bun.lock`
74
+ - `source/init.ts`
75
+ - `source/init.spec.ts`
76
+ - `source/cli.ts`
77
+ - `source/cli.spec.ts`
78
+ - `source/help.ts`
79
+ - Behavior:
80
+ - Use a dependency-free Bun terminal prompt adapter with clear visual states,
81
+ so the initializer remains portable across native and Windows builds.
82
+ - Isolate prompt interactions behind an injected interface so prompt flow and
83
+ filesystem behavior can be tested without a real terminal.
84
+ - In an interactive terminal, welcome the user, collect a project name
85
+ defaulting to the selected directory name, collect a scripts directory
86
+ defaulting to `scripts`, preview the exact YAML, and request confirmation.
87
+ - Write only `runx.yaml`; create `scripts/` later when the first real script
88
+ is added.
89
+ - Detect an existing `runx.yaml` in the selected directory and require a
90
+ second explicit overwrite confirmation.
91
+ - Use an atomic temporary-file write and leave no partial manifest on
92
+ cancellation or failure.
93
+ - Fail clearly outside an interactive terminal; do not hang and do not emit
94
+ interactive ANSI frames into JSON output.
95
+ - Accept `--cwd` as the target directory, reject `--file` because the
96
+ initializer always creates `runx.yaml`, and reject `--format json` because
97
+ initialization is an interactive terminal workflow.
98
+ - Register `init` as a first-class Citty command, include it in help/home and
99
+ command-tree output, and reserve the word from selector shorthand.
100
+ - Tests:
101
+ - Successful creation exactly matches the accepted YAML shape.
102
+ - Cancellation leaves no file.
103
+ - Existing-file rejection and confirmed overwrite are safe.
104
+ - Default and custom project/scripts values validate.
105
+ - CLI help works outside a manifest and non-interactive invocation exits with
106
+ a clear error.
107
+ - `--file` and `--format json` report clear unsupported-option errors without
108
+ creating files.
109
+ - The generated file passes `runx check` and `runx list`.
110
+ - Acceptance: `runx init` produces a polished, deterministic creation flow and
111
+ never executes a manifest command.
112
+ - Stop conditions: Stop if the terminal prompt adapter fails Bun tests or native
113
+ compile, if Citty cannot route `init` without conflicting with selector shorthand, or
114
+ if atomic replacement is not portable on Windows.
115
+
116
+ ## Unit 3: Align Canonical Documentation and XDocs
117
+
118
+ - Goal: Make public and structured documentation accurately describe the new
119
+ manifest and initializer without modifying the bundled agent skill.
120
+ - Dependencies: Units 1 and 2.
121
+ - Files:
122
+ - `README.md`
123
+ - `DOCS.md`
124
+ - `source/source.xdocs.md`
125
+ - `runx.xdocs.md` when its package description needs updating
126
+ - `docs/plans/plans.xdocs.md`
127
+ - Behavior:
128
+ - Document `runx init`, Semantic Versioning, `scripts.directory`, mandatory
129
+ `public`, empty catalog initialization, and command-to-script examples.
130
+ - Keep the bundled `skills/guiho-s-runx/SKILL.md` unchanged; its update belongs
131
+ to the separate agent-integration delivery requested by the project owner.
132
+ - Update the source descriptor for the initializer module and changed CLI /
133
+ manifest responsibilities.
134
+ - Checks:
135
+ - `xdocs meta docs\plans --documents --strict --format json`
136
+ - `xdocs meta source --strict --format json`
137
+ - `xdocs tree`
138
+ - Acceptance: User-facing docs, XDocs metadata, and implementation agree.
139
+ - Stop conditions: Stop if XDocs requires unrelated coverage cleanup; validate
140
+ only the affected subtrees and report wider pre-existing findings.
141
+
142
+ ## Unit 4: Validate, Review, Commit, Push, and Open a Pull Request
143
+
144
+ - Goal: Produce evidence that the implementation satisfies the accepted
145
+ decision, then deliver it as a draft pull request from `codex/runx-init`.
146
+ - Dependencies: Units 1 through 3.
147
+ - Checks:
148
+ - `bun run typecheck`
149
+ - `bun test`
150
+ - `bun run build`
151
+ - `bun run binary`
152
+ - `xdocs meta docs\plans --documents --strict --format json`
153
+ - `xdocs meta source --strict --format json`
154
+ - `xdocs tree`
155
+ - `git diff --check`
156
+ - Delivery:
157
+ - Write an implementation review and validation report with XDocs metadata.
158
+ - Commit coherent code, tests, documentation, and validation artifacts.
159
+ - Push only the feature branch and create a draft pull request that links
160
+ issue #10 and states that agent-skill automation is intentionally tracked
161
+ separately in issue #11.
162
+ - Acceptance: All applicable checks pass, the worktree is clean, the branch is
163
+ pushed, and the draft pull request is reviewable without a release, tag, or
164
+ package publication.
165
+ - Stop conditions: Stop before push/PR if validation fails, unrelated changes
166
+ appear, GitHub rejects authentication, or the branch diverges unexpectedly.
167
+
168
+ ## TODO Alignment
169
+
170
+ This is one approved, focused package implementation and does not need a new
171
+ long-running TODO entry. The decision, plan, review, and validation records are
172
+ the durable delivery trail.
173
+
174
+ ## First Executable Unit
175
+
176
+ Unit 1: update `source/manifest.ts` and its fixtures/tests to enforce the
177
+ accepted manifest contract.
@@ -6,22 +6,33 @@ children: []
6
6
  files:
7
7
  alpha-implementation.md: Breaks the accepted alpha into implementation and validation units.
8
8
  citty-cli-migration.md: Executes the full Citty command-tree migration, compatibility validation, protected delivery, and patch release.
9
+ interactive-init-manifest.md: Sequences the SemVer manifest, public group, scripts directory, and interactive initializer delivery.
9
10
  mirror-automatic-push.md: Enables automatic Mirror release pushes with a synchronized protected-main safety gate.
10
11
  npm-trusted-publishing-release.md: Sequences workflow implementation, protected delivery, Mirror patching, and public trusted-publishing verification.
12
+ rfc-0034-cli-compliance-migration.md: Executes the breaking full RFC 0034 migration across runtime, configuration, help, agents, upgrades, distribution, release assets, documentation, and validation.
11
13
  windows-self-upgrade.md: Sequences synchronous Windows replacement, rollback coverage, validation, issue closure, and patch delivery.
14
+ upgrade-reliability-implementation.md: Sequences release discovery, streamed progress, transactional replacement, recovery, installers, and validation.
12
15
  documents:
13
16
  alpha-implementation.md: Plan used for the initial RunX implementation.
14
17
  citty-cli-migration.md: Active plan for replacing handwritten CLI parsing and routing with Citty and delivering its patch release.
18
+ interactive-init-manifest.md: Approved implementation plan for the RunX interactive init manifest feature.
15
19
  mirror-automatic-push.md: Approved plan for configuring, validating, and merging Mirror push=true without applying another release.
16
20
  npm-trusted-publishing-release.md: Approved executable plan for the RunX 0.2.1 trusted-publishing release trial.
21
+ rfc-0034-cli-compliance-migration.md: Approved step-by-step plan for making RunX fully compliant with the GUIHO CLI engineer contract.
17
22
  windows-self-upgrade.md: Approved executable plan for fixing Windows native self-upgrade and delivering its patch.
23
+ upgrade-reliability-implementation.md: Approved executable plan for GitHub issues 12 and 13.
18
24
  tags:
19
25
  - plans
20
26
  keywords:
21
27
  - runx
22
28
  - implementation
23
29
  - citty
30
+ - runx init
31
+ - scripts directory
24
32
  - mirror push
33
+ - RFC 0034
34
+ - agent namespace
35
+ - fourteen release assets
25
36
  - windows self-upgrade
26
37
  flags: []
27
38
  status: stable