devrites 5.6.0 → 5.7.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.
- package/CHANGELOG.md +6 -0
- package/README.md +1 -1
- package/install.sh +107 -41
- package/pack/.claude/skills/rite-define/SKILL.md +1 -1
- package/pack/.claude/skills/rite-handoff/SKILL.md +1 -1
- package/pack/.claude/skills/rite-plan/SKILL.md +1 -1
- package/pack/.claude/skills/rite-pressure-test/SKILL.md +1 -1
- package/pack/.claude/skills/rite-quick/SKILL.md +1 -1
- package/pack/.claude/skills/rite-status/SKILL.md +1 -1
- package/pack/.claude/skills/rite-zoom-out/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-define/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-handoff/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-plan/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-pressure-test/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-quick/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-define/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-handoff/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-plan/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-quick/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-define/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-handoff/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-plan/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-pressure-test/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-quick/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-zoom-out/SKILL.md +1 -1
- package/pack/generated/pi/prompts/rite-define.md +1 -1
- package/pack/generated/pi/prompts/rite-handoff.md +1 -1
- package/pack/generated/pi/prompts/rite-plan.md +1 -1
- package/pack/generated/pi/prompts/rite-pressure-test.md +1 -1
- package/pack/generated/pi/prompts/rite-quick.md +1 -1
- package/pack/generated/pi/prompts/rite-status.md +1 -1
- package/pack/generated/pi/prompts/rite-zoom-out.md +1 -1
- package/pack/generated/pi/skills/rite-define/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-handoff/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-plan/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-pressure-test/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-quick/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-zoom-out/SKILL.md +1 -1
- package/package.json +1 -1
- package/scripts/build-host-artifacts.sh +59 -46
- package/scripts/pi-generate.sh +15 -15
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to DevRites are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and DevRites adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Releases are generated automatically by [semantic-release](https://semantic-release.gitbook.io/) from Conventional Commits on `main`.
|
|
4
4
|
|
|
5
|
+
## [5.7.0](https://github.com/ViktorsBaikers/DevRites/compare/v5.6.0...v5.7.0) (2026-09-13)
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
* **installer:** pi as fourth host target + skill frontmatter YAML fix ([#70](https://github.com/ViktorsBaikers/DevRites/issues/70)) ([9275755](https://github.com/ViktorsBaikers/DevRites/commit/92757555f4c6cf74f8cdec5f8e8688ec28360508))
|
|
10
|
+
|
|
5
11
|
## [5.6.0](https://github.com/ViktorsBaikers/DevRites/compare/v5.5.0...v5.6.0) (2026-09-13)
|
|
6
12
|
|
|
7
13
|
### Added
|
package/README.md
CHANGED
|
@@ -33,7 +33,7 @@ project-conventional push, tag, or PR action, and archive the workspace.
|
|
|
33
33
|
Unattended runs may create local WIP checkpoint commits along the way, but they
|
|
34
34
|
remain local unless Ship's disclosed plan includes an approved remote action.
|
|
35
35
|
|
|
36
|
-
**Status:** [`v5.
|
|
36
|
+
**Status:** [`v5.7.0`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v5.7.0): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
|
|
37
37
|
|
|
38
38
|
This is the latest published release; `main` may contain unreleased work.
|
|
39
39
|
|
package/install.sh
CHANGED
|
@@ -28,8 +28,8 @@ normalize_release_tag() {
|
|
|
28
28
|
printf '%s\n' "$version" | LC_ALL=C grep -Eq '^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$' || return 1
|
|
29
29
|
prerelease="${version%%+*}"
|
|
30
30
|
case "$prerelease" in
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
*-*) prerelease="${prerelease#*-}" ;;
|
|
32
|
+
*) prerelease="" ;;
|
|
33
33
|
esac
|
|
34
34
|
if [ -n "$prerelease" ]; then
|
|
35
35
|
printf '%s\n' "$prerelease" | awk -F. '{ for (i = 1; i <= NF; i++) if ($i ~ /^[0-9]+$/ && length($i) > 1 && substr($i, 1, 1) == "0") exit 1 }' || return 1
|
|
@@ -45,11 +45,11 @@ bounded_curl() {
|
|
|
45
45
|
DOWNLOAD_FAILURE=""
|
|
46
46
|
rm -f "$out" "$out.part"
|
|
47
47
|
curl -fL --proto '=https' --proto-redir '=https' --tlsv1.2 --connect-timeout 10 --max-time "$seconds" \
|
|
48
|
-
"$url" 2>/dev/null | head -c "$((limit + 1))" >
|
|
48
|
+
"$url" 2>/dev/null | head -c "$((limit + 1))" >"$out.part"
|
|
49
49
|
pipeline_status=("${PIPESTATUS[@]}")
|
|
50
50
|
curl_status="${pipeline_status[0]}"
|
|
51
51
|
head_status="${pipeline_status[1]}"
|
|
52
|
-
bytes="$(wc -c <
|
|
52
|
+
bytes="$(wc -c <"$out.part" 2>/dev/null)" || {
|
|
53
53
|
DOWNLOAD_FAILURE="local write"
|
|
54
54
|
rm -f "$out.part"
|
|
55
55
|
return 1
|
|
@@ -66,15 +66,19 @@ bounded_curl() {
|
|
|
66
66
|
fi
|
|
67
67
|
if [ "$curl_status" -ne 0 ]; then
|
|
68
68
|
case "$curl_status" in
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
69
|
+
22) DOWNLOAD_FAILURE="HTTP status" ;;
|
|
70
|
+
28) DOWNLOAD_FAILURE="timeout" ;;
|
|
71
|
+
47) DOWNLOAD_FAILURE="redirect" ;;
|
|
72
|
+
*) DOWNLOAD_FAILURE="download" ;;
|
|
73
73
|
esac
|
|
74
74
|
rm -f "$out.part"
|
|
75
75
|
return 1
|
|
76
76
|
fi
|
|
77
|
-
mv "$out.part" "$out" || {
|
|
77
|
+
mv "$out.part" "$out" || {
|
|
78
|
+
DOWNLOAD_FAILURE="local write"
|
|
79
|
+
rm -f "$out.part"
|
|
80
|
+
return 1
|
|
81
|
+
}
|
|
78
82
|
}
|
|
79
83
|
|
|
80
84
|
bounded_decompress() {
|
|
@@ -83,11 +87,11 @@ bounded_decompress() {
|
|
|
83
87
|
limit="$3"
|
|
84
88
|
DECOMPRESS_FAILURE=""
|
|
85
89
|
rm -f "$out" "$out.part"
|
|
86
|
-
gzip -dc "$archive" 2>/dev/null | head -c "$((limit + 1))" >
|
|
90
|
+
gzip -dc "$archive" 2>/dev/null | head -c "$((limit + 1))" >"$out.part"
|
|
87
91
|
pipeline_status=("${PIPESTATUS[@]}")
|
|
88
92
|
gzip_status="${pipeline_status[0]}"
|
|
89
93
|
head_status="${pipeline_status[1]}"
|
|
90
|
-
bytes="$(wc -c <
|
|
94
|
+
bytes="$(wc -c <"$out.part" 2>/dev/null)" || {
|
|
91
95
|
DECOMPRESS_FAILURE="could not write bounded archive"
|
|
92
96
|
rm -f "$out.part"
|
|
93
97
|
return 1
|
|
@@ -107,7 +111,11 @@ bounded_decompress() {
|
|
|
107
111
|
rm -f "$out.part"
|
|
108
112
|
return 1
|
|
109
113
|
fi
|
|
110
|
-
mv "$out.part" "$out" || {
|
|
114
|
+
mv "$out.part" "$out" || {
|
|
115
|
+
DECOMPRESS_FAILURE="could not write bounded archive"
|
|
116
|
+
rm -f "$out.part"
|
|
117
|
+
return 1
|
|
118
|
+
}
|
|
111
119
|
}
|
|
112
120
|
|
|
113
121
|
verify_sha256() {
|
|
@@ -173,19 +181,31 @@ preflight_archive() {
|
|
|
173
181
|
bootstrap_bundle() {
|
|
174
182
|
script="install"
|
|
175
183
|
case "${1:-}" in
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
184
|
+
install | update | uninstall)
|
|
185
|
+
script="$1"
|
|
186
|
+
shift
|
|
187
|
+
;;
|
|
180
188
|
esac
|
|
181
189
|
if [ "${DEVRITES_BOOTSTRAPPED:-0}" = "1" ]; then
|
|
182
190
|
echo "error: bootstrap re-exec did not find pack/ - aborting to avoid a loop." >&2
|
|
183
191
|
exit 1
|
|
184
192
|
fi
|
|
185
|
-
command -v curl >/dev/null 2>&1 || {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
193
|
+
command -v curl >/dev/null 2>&1 || {
|
|
194
|
+
echo "error: curl is required for the network installer." >&2
|
|
195
|
+
exit 1
|
|
196
|
+
}
|
|
197
|
+
command -v gzip >/dev/null 2>&1 || {
|
|
198
|
+
echo "error: gzip is required for the network installer." >&2
|
|
199
|
+
exit 1
|
|
200
|
+
}
|
|
201
|
+
command -v tar >/dev/null 2>&1 || {
|
|
202
|
+
echo "error: tar is required for the network installer." >&2
|
|
203
|
+
exit 1
|
|
204
|
+
}
|
|
205
|
+
valid_repo "$DEVRITES_REPO" || {
|
|
206
|
+
echo "error: DEVRITES_REPO must be an owner/repository name." >&2
|
|
207
|
+
exit 1
|
|
208
|
+
}
|
|
189
209
|
old_umask="$(umask)"
|
|
190
210
|
umask 077
|
|
191
211
|
BOOTSTRAP_DIR="$(mktemp -d "${TMPDIR:-/tmp}/devrites-bootstrap.XXXXXX" 2>/dev/null)" || {
|
|
@@ -197,7 +217,10 @@ bootstrap_bundle() {
|
|
|
197
217
|
trap 'exit 1' HUP INT TERM
|
|
198
218
|
trap 'rm -rf "$BOOTSTRAP_DIR"' EXIT
|
|
199
219
|
if [ -n "$DEVRITES_REF" ]; then
|
|
200
|
-
tag="$(normalize_release_tag "$DEVRITES_REF")" || {
|
|
220
|
+
tag="$(normalize_release_tag "$DEVRITES_REF")" || {
|
|
221
|
+
echo "error: DEVRITES_REF must be an exact semantic version." >&2
|
|
222
|
+
exit 1
|
|
223
|
+
}
|
|
201
224
|
else
|
|
202
225
|
metadata="$BOOTSTRAP_DIR/latest.json"
|
|
203
226
|
bounded_curl "https://api.github.com/repos/$DEVRITES_REPO/releases/latest" "$metadata" "$BOOTSTRAP_MAX_METADATA" 30 || {
|
|
@@ -205,23 +228,53 @@ bootstrap_bundle() {
|
|
|
205
228
|
exit 1
|
|
206
229
|
}
|
|
207
230
|
metadata_tag="$(sed -n 's/.*"tag_name"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' "$metadata" | head -n1)"
|
|
208
|
-
tag="$(normalize_release_tag "$metadata_tag")" || {
|
|
231
|
+
tag="$(normalize_release_tag "$metadata_tag")" || {
|
|
232
|
+
echo "error: latest release did not provide an exact semantic version." >&2
|
|
233
|
+
exit 1
|
|
234
|
+
}
|
|
209
235
|
fi
|
|
210
236
|
asset="devrites-$tag.tar.gz"
|
|
211
237
|
archive="$BOOTSTRAP_DIR/$asset"
|
|
212
238
|
sidecar="$archive.sha256"
|
|
213
239
|
url="https://github.com/$DEVRITES_REPO/releases/download/$tag/$asset"
|
|
214
|
-
bounded_curl "$url" "$archive" "$BOOTSTRAP_MAX_ARCHIVE" 120 || {
|
|
215
|
-
|
|
216
|
-
|
|
240
|
+
bounded_curl "$url" "$archive" "$BOOTSTRAP_MAX_ARCHIVE" 120 || {
|
|
241
|
+
echo "error: release $tag asset $asset: ${DOWNLOAD_FAILURE:-download} failed." >&2
|
|
242
|
+
exit 1
|
|
243
|
+
}
|
|
244
|
+
bounded_curl "$url.sha256" "$sidecar" "$BOOTSTRAP_MAX_SIDECAR" 30 || {
|
|
245
|
+
rm -f "$archive"
|
|
246
|
+
echo "error: release $tag asset $asset.sha256: ${DOWNLOAD_FAILURE:-download} failed." >&2
|
|
247
|
+
exit 1
|
|
248
|
+
}
|
|
249
|
+
verify_sha256 "$archive" "$sidecar" "$asset" || {
|
|
250
|
+
rm -f "$archive" "$sidecar"
|
|
251
|
+
echo "error: release $tag asset $asset: checksum failed." >&2
|
|
252
|
+
exit 1
|
|
253
|
+
}
|
|
217
254
|
uncompressed="$BOOTSTRAP_DIR/devrites-$tag.tar"
|
|
218
|
-
bounded_decompress "$archive" "$uncompressed" "$BOOTSTRAP_MAX_UNCOMPRESSED" || {
|
|
219
|
-
|
|
255
|
+
bounded_decompress "$archive" "$uncompressed" "$BOOTSTRAP_MAX_UNCOMPRESSED" || {
|
|
256
|
+
rm -f "$archive" "$sidecar"
|
|
257
|
+
echo "error: release $tag asset $asset: ${DECOMPRESS_FAILURE:-decompression failed}." >&2
|
|
258
|
+
exit 1
|
|
259
|
+
}
|
|
260
|
+
preflight_archive "$uncompressed" "$tag" || {
|
|
261
|
+
rm -f "$archive" "$sidecar" "$uncompressed"
|
|
262
|
+
echo "error: release $tag asset $asset: archive preflight failed." >&2
|
|
263
|
+
exit 1
|
|
264
|
+
}
|
|
220
265
|
extract="$BOOTSTRAP_DIR/extract"
|
|
221
266
|
mkdir "$extract" || exit 1
|
|
222
|
-
tar -C "$extract" -xf "$uncompressed" || {
|
|
267
|
+
tar -C "$extract" -xf "$uncompressed" || {
|
|
268
|
+
rm -rf "$extract"
|
|
269
|
+
echo "error: could not extract bounded DevRites tarball" >&2
|
|
270
|
+
exit 1
|
|
271
|
+
}
|
|
223
272
|
bundle="$extract/devrites-$tag"
|
|
224
|
-
[ -f "$bundle/$script.sh" ] || {
|
|
273
|
+
[ -f "$bundle/$script.sh" ] || {
|
|
274
|
+
rm -rf "$extract"
|
|
275
|
+
echo "error: extracted bundle is missing $script.sh" >&2
|
|
276
|
+
exit 1
|
|
277
|
+
}
|
|
225
278
|
chmod +x "$bundle/install.sh" "$bundle/uninstall.sh" "$bundle/update.sh" 2>/dev/null || true
|
|
226
279
|
echo "DevRites: bootstrapped from $tag"
|
|
227
280
|
export DEVRITES_BOOTSTRAPPED=1
|
|
@@ -235,25 +288,38 @@ if [ -z "$SELF_DIR" ] || [ ! -d "$SELF_DIR/pack" ]; then
|
|
|
235
288
|
fi
|
|
236
289
|
|
|
237
290
|
INSTALL_LIB="$SELF_DIR/scripts/install-lib.sh"
|
|
238
|
-
[ -f "$INSTALL_LIB" ] || {
|
|
291
|
+
[ -f "$INSTALL_LIB" ] || {
|
|
292
|
+
echo "error: extracted bundle is missing scripts/install-lib.sh" >&2
|
|
293
|
+
exit 1
|
|
294
|
+
}
|
|
239
295
|
. "$INSTALL_LIB"
|
|
240
296
|
|
|
241
|
-
DR_ENGINE_PATH=""
|
|
297
|
+
DR_ENGINE_PATH=""
|
|
298
|
+
DR_ENGINE_TMP=""
|
|
242
299
|
trap dr_cleanup_engine EXIT
|
|
243
300
|
trap 'exit 1' HUP INT TERM
|
|
244
|
-
dr_acquire_engine "$SELF_DIR" install "$DEVRITES_REPO" || {
|
|
301
|
+
dr_acquire_engine "$SELF_DIR" install "$DEVRITES_REPO" || {
|
|
302
|
+
echo "error: could not acquire devrites-engine (no usable installed binary and no matching verified release binary${DR_ACQUIRE_FAILURE:+; $DR_ACQUIRE_FAILURE})." >&2
|
|
303
|
+
exit 1
|
|
304
|
+
}
|
|
245
305
|
ENGINE="$DR_ENGINE_PATH"
|
|
246
306
|
PAYLOAD="${DEVRITES_HOST_ARTIFACT_DIR:-$SELF_DIR/pack/generated}"
|
|
247
|
-
if [ ! -d "$PAYLOAD/claude/skills" ] || [ ! -d "$PAYLOAD/codex/skills" ]
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
307
|
+
if [ ! -d "$PAYLOAD/claude/skills" ] || [ ! -d "$PAYLOAD/codex/skills" ] ||
|
|
308
|
+
[ ! -d "$PAYLOAD/pi/skills" ] || [ ! -d "$PAYLOAD/pi/agents" ] ||
|
|
309
|
+
[ ! -d "$PAYLOAD/pi/prompts" ] ||
|
|
310
|
+
[ ! -f "$PAYLOAD/claude/skills/devrites-lib/reference/standards/agents.md" ] ||
|
|
311
|
+
[ ! -f "$PAYLOAD/codex/skills/devrites-lib/reference/standards/agents.md" ] ||
|
|
312
|
+
[ ! -f "$PAYLOAD/pi/skills/devrites-lib/reference/standards/agents.md" ] ||
|
|
313
|
+
[ ! -f "$PAYLOAD/codex/config.toml" ] || [ ! -f "$PAYLOAD/pi/AGENTS.md" ]; then
|
|
254
314
|
BUILDER="$SELF_DIR/scripts/build-host-artifacts.sh"
|
|
255
|
-
[ -f "$BUILDER" ] || {
|
|
256
|
-
|
|
315
|
+
[ -f "$BUILDER" ] || {
|
|
316
|
+
echo "error: generated install payload missing at $PAYLOAD and builder missing at $BUILDER" >&2
|
|
317
|
+
exit 1
|
|
318
|
+
}
|
|
319
|
+
DEVRITES_HOST_ARTIFACT_DIR="$PAYLOAD" bash "$BUILDER" >/dev/null || {
|
|
320
|
+
echo "error: could not generate install payload at $PAYLOAD" >&2
|
|
321
|
+
exit 1
|
|
322
|
+
}
|
|
257
323
|
fi
|
|
258
324
|
export DEVRITES_ENGINE_CLI="$ENGINE"
|
|
259
325
|
"$ENGINE" install --source-dir "$SELF_DIR" --payload-dir "$PAYLOAD" "$@"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-define
|
|
3
|
-
description: Define the first build plan from an approved spec: architecture, task slices, traceability, and state. Use when turning approved intent into its initial plan.
|
|
3
|
+
description: "Define the first build plan from an approved spec: architecture, task slices, traceability, and state. Use when turning approved intent into its initial plan."
|
|
4
4
|
argument-hint: "[feature-slug]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-handoff
|
|
3
|
-
description: User-invoked handoff writer: sync chat-only context into `.devrites/` and write a fresh-agent handoff.
|
|
3
|
+
description: "User-invoked handoff writer: sync chat-only context into `.devrites/` and write a fresh-agent handoff."
|
|
4
4
|
user-invocable: true
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
argument-hint: "[what the next session will focus on]"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-plan
|
|
3
|
-
description: Re-plan existing work when reality invalidates the plan: reslice a slice that is too big, repair drift, reorder dependencies, split boundaries, or unblock work. Not first-pass decomposition.
|
|
3
|
+
description: "Re-plan existing work when reality invalidates the plan: reslice a slice that is too big, repair drift, reorder dependencies, split boundaries, or unblock work. Not first-pass decomposition."
|
|
4
4
|
argument-hint: "[mode: decompose|reslice|repair|reorder|split|unblock|course-correct|revise]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-pressure-test
|
|
3
|
-
description: Pressure-test a rough/vague idea: ideate, explore 3-5 approaches, radically different shapes, diverge then converge on direction before spec. Not for writing spec.
|
|
3
|
+
description: "Pressure-test a rough/vague idea: ideate, explore 3-5 approaches, radically different shapes, diverge then converge on direction before spec. Not for writing spec."
|
|
4
4
|
argument-hint: "[rough idea or plan to stress-test]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-quick
|
|
3
|
-
description: Express lane for a small reversible change: typo/copy/config, rate-limit constant, error message, local variable rename, feature flag, README link, one-file/function fix.
|
|
3
|
+
description: "Express lane for a small reversible change: typo/copy/config, rate-limit constant, error message, local variable rename, feature flag, README link, one-file/function fix."
|
|
4
4
|
argument-hint: "<what to change>"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-status
|
|
3
|
-
description: User-invoked read-only active-feature report: phase, active slice, next action, evidence, open questions, drift, risks, and handoff readiness.
|
|
3
|
+
description: "User-invoked read-only active-feature report: phase, active slice, next action, evidence, open questions, drift, risks, and handoff readiness."
|
|
4
4
|
argument-hint: "[feature-slug]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
disable-model-invocation: true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-zoom-out
|
|
3
|
-
description: User-invoked read-only structural map of unfamiliar code: modules, callers, callees, and relevant decisions.
|
|
3
|
+
description: "User-invoked read-only structural map of unfamiliar code: modules, callers, callees, and relevant decisions."
|
|
4
4
|
argument-hint: "[symbol | file | area to map]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
disable-model-invocation: true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-define
|
|
3
|
-
description: Define the first build plan from an approved spec: architecture, task slices, traceability, and state. Use when turning approved intent into its initial plan.
|
|
3
|
+
description: "Define the first build plan from an approved spec: architecture, task slices, traceability, and state. Use when turning approved intent into its initial plan."
|
|
4
4
|
argument-hint: "[feature-slug]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-handoff
|
|
3
|
-
description: User-invoked handoff writer: sync chat-only context into `.devrites/` and write a fresh-agent handoff.
|
|
3
|
+
description: "User-invoked handoff writer: sync chat-only context into `.devrites/` and write a fresh-agent handoff."
|
|
4
4
|
user-invocable: true
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
argument-hint: "[what the next session will focus on]"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-plan
|
|
3
|
-
description: Re-plan existing work when reality invalidates the plan: reslice a slice that is too big, repair drift, reorder dependencies, split boundaries, or unblock work. Not first-pass decomposition.
|
|
3
|
+
description: "Re-plan existing work when reality invalidates the plan: reslice a slice that is too big, repair drift, reorder dependencies, split boundaries, or unblock work. Not first-pass decomposition."
|
|
4
4
|
argument-hint: "[mode: decompose|reslice|repair|reorder|split|unblock|course-correct|revise]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-pressure-test
|
|
3
|
-
description: Pressure-test a rough/vague idea: ideate, explore 3-5 approaches, radically different shapes, diverge then converge on direction before spec. Not for writing spec.
|
|
3
|
+
description: "Pressure-test a rough/vague idea: ideate, explore 3-5 approaches, radically different shapes, diverge then converge on direction before spec. Not for writing spec."
|
|
4
4
|
argument-hint: "[rough idea or plan to stress-test]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-quick
|
|
3
|
-
description: Express lane for a small reversible change: typo/copy/config, rate-limit constant, error message, local variable rename, feature flag, README link, one-file/function fix.
|
|
3
|
+
description: "Express lane for a small reversible change: typo/copy/config, rate-limit constant, error message, local variable rename, feature flag, README link, one-file/function fix."
|
|
4
4
|
argument-hint: "<what to change>"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-status
|
|
3
|
-
description: User-invoked read-only active-feature report: phase, active slice, next action, evidence, open questions, drift, risks, and handoff readiness.
|
|
3
|
+
description: "User-invoked read-only active-feature report: phase, active slice, next action, evidence, open questions, drift, risks, and handoff readiness."
|
|
4
4
|
argument-hint: "[feature-slug]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
disable-model-invocation: true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-zoom-out
|
|
3
|
-
description: User-invoked read-only structural map of unfamiliar code: modules, callers, callees, and relevant decisions.
|
|
3
|
+
description: "User-invoked read-only structural map of unfamiliar code: modules, callers, callees, and relevant decisions."
|
|
4
4
|
argument-hint: "[symbol | file | area to map]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
disable-model-invocation: true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-define
|
|
3
|
-
description: Define the first build plan from an approved spec: architecture, task slices, traceability, and state. Use when turning approved intent into its initial plan.
|
|
3
|
+
description: "Define the first build plan from an approved spec: architecture, task slices, traceability, and state. Use when turning approved intent into its initial plan."
|
|
4
4
|
argument-hint: "[feature-slug]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-handoff
|
|
3
|
-
description: User-invoked handoff writer: sync chat-only context into `.devrites/` and write a fresh-agent handoff.
|
|
3
|
+
description: "User-invoked handoff writer: sync chat-only context into `.devrites/` and write a fresh-agent handoff."
|
|
4
4
|
user-invocable: true
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
argument-hint: "[what the next session will focus on]"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-plan
|
|
3
|
-
description: Re-plan existing work when reality invalidates the plan: reslice a slice that is too big, repair drift, reorder dependencies, split boundaries, or unblock work. Not first-pass decomposition.
|
|
3
|
+
description: "Re-plan existing work when reality invalidates the plan: reslice a slice that is too big, repair drift, reorder dependencies, split boundaries, or unblock work. Not first-pass decomposition."
|
|
4
4
|
argument-hint: "[mode: decompose|reslice|repair|reorder|split|unblock|course-correct|revise]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-pressure-test
|
|
3
|
-
description: Pressure-test a rough/vague idea: ideate, explore 3-5 approaches, radically different shapes, diverge then converge on direction before spec. Not for writing spec.
|
|
3
|
+
description: "Pressure-test a rough/vague idea: ideate, explore 3-5 approaches, radically different shapes, diverge then converge on direction before spec. Not for writing spec."
|
|
4
4
|
argument-hint: "[rough idea or plan to stress-test]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-quick
|
|
3
|
-
description: Express lane for a small reversible change: typo/copy/config, rate-limit constant, error message, local variable rename, feature flag, README link, one-file/function fix.
|
|
3
|
+
description: "Express lane for a small reversible change: typo/copy/config, rate-limit constant, error message, local variable rename, feature flag, README link, one-file/function fix."
|
|
4
4
|
argument-hint: "<what to change>"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-status
|
|
3
|
-
description: User-invoked read-only active-feature report: phase, active slice, next action, evidence, open questions, drift, risks, and handoff readiness.
|
|
3
|
+
description: "User-invoked read-only active-feature report: phase, active slice, next action, evidence, open questions, drift, risks, and handoff readiness."
|
|
4
4
|
argument-hint: "[feature-slug]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
disable-model-invocation: true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-zoom-out
|
|
3
|
-
description: User-invoked read-only structural map of unfamiliar code: modules, callers, callees, and relevant decisions.
|
|
3
|
+
description: "User-invoked read-only structural map of unfamiliar code: modules, callers, callees, and relevant decisions."
|
|
4
4
|
argument-hint: "[symbol | file | area to map]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
disable-model-invocation: true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-define
|
|
3
|
-
description: Define the first build plan from an approved spec: architecture, task slices, traceability, and state. Use when turning approved intent into its initial plan.
|
|
3
|
+
description: "Define the first build plan from an approved spec: architecture, task slices, traceability, and state. Use when turning approved intent into its initial plan."
|
|
4
4
|
argument-hint: "[feature-slug]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-handoff
|
|
3
|
-
description: User-invoked handoff writer: sync chat-only context into `.devrites/` and write a fresh-agent handoff.
|
|
3
|
+
description: "User-invoked handoff writer: sync chat-only context into `.devrites/` and write a fresh-agent handoff."
|
|
4
4
|
user-invocable: true
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
argument-hint: "[what the next session will focus on]"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-plan
|
|
3
|
-
description: Re-plan existing work when reality invalidates the plan: reslice a slice that is too big, repair drift, reorder dependencies, split boundaries, or unblock work. Not first-pass decomposition.
|
|
3
|
+
description: "Re-plan existing work when reality invalidates the plan: reslice a slice that is too big, repair drift, reorder dependencies, split boundaries, or unblock work. Not first-pass decomposition."
|
|
4
4
|
argument-hint: "[mode: decompose|reslice|repair|reorder|split|unblock|course-correct|revise]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-pressure-test
|
|
3
|
-
description: Pressure-test a rough/vague idea: ideate, explore 3-5 approaches, radically different shapes, diverge then converge on direction before spec. Not for writing spec.
|
|
3
|
+
description: "Pressure-test a rough/vague idea: ideate, explore 3-5 approaches, radically different shapes, diverge then converge on direction before spec. Not for writing spec."
|
|
4
4
|
argument-hint: "[rough idea or plan to stress-test]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-quick
|
|
3
|
-
description: Express lane for a small reversible change: typo/copy/config, rate-limit constant, error message, local variable rename, feature flag, README link, one-file/function fix.
|
|
3
|
+
description: "Express lane for a small reversible change: typo/copy/config, rate-limit constant, error message, local variable rename, feature flag, README link, one-file/function fix."
|
|
4
4
|
argument-hint: "<what to change>"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-status
|
|
3
|
-
description: User-invoked read-only active-feature report: phase, active slice, next action, evidence, open questions, drift, risks, and handoff readiness.
|
|
3
|
+
description: "User-invoked read-only active-feature report: phase, active slice, next action, evidence, open questions, drift, risks, and handoff readiness."
|
|
4
4
|
argument-hint: "[feature-slug]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
disable-model-invocation: true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-zoom-out
|
|
3
|
-
description: User-invoked read-only structural map of unfamiliar code: modules, callers, callees, and relevant decisions.
|
|
3
|
+
description: "User-invoked read-only structural map of unfamiliar code: modules, callers, callees, and relevant decisions."
|
|
4
4
|
argument-hint: "[symbol | file | area to map]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
disable-model-invocation: true
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Define the first build plan from an approved spec: architecture, task slices, traceability, and state. Use when turning approved intent into its initial plan
|
|
2
|
+
description: "\"Define the first build plan from an approved spec: architecture, task slices, traceability, and state. Use when turning approved intent into its initial plan.\""
|
|
3
3
|
argument-hint: "\"[feature-slug]\""
|
|
4
4
|
---
|
|
5
5
|
Read and follow the DevRites skill at `.pi/skills/rite-define/SKILL.md`, applying it to: ${ARGUMENTS:-the current request}.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "User-invoked handoff writer: sync chat-only context into `.devrites/` and write a fresh-agent handoff
|
|
2
|
+
description: "\"User-invoked handoff writer: sync chat-only context into `.devrites/` and write a fresh-agent handoff.\""
|
|
3
3
|
argument-hint: "\"[what the next session will focus on]\""
|
|
4
4
|
---
|
|
5
5
|
Read and follow the DevRites skill at `.pi/skills/rite-handoff/SKILL.md`, applying it to: ${ARGUMENTS:-the current request}.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Re-plan existing work when reality invalidates the plan: reslice a slice that is too big, repair drift, reorder dependencies, split boundaries, or unblock work. Not first-pass decomposition
|
|
2
|
+
description: "\"Re-plan existing work when reality invalidates the plan: reslice a slice that is too big, repair drift, reorder dependencies, split boundaries, or unblock work. Not first-pass decomposition.\""
|
|
3
3
|
argument-hint: "\"[mode: decompose|reslice|repair|reorder|split|unblock|course-correct|revise]\""
|
|
4
4
|
---
|
|
5
5
|
Read and follow the DevRites skill at `.pi/skills/rite-plan/SKILL.md`, applying it to: ${ARGUMENTS:-the current request}.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Pressure-test a rough/vague idea: ideate, explore 3-5 approaches, radically different shapes, diverge then converge on direction before spec. Not for writing spec
|
|
2
|
+
description: "\"Pressure-test a rough/vague idea: ideate, explore 3-5 approaches, radically different shapes, diverge then converge on direction before spec. Not for writing spec.\""
|
|
3
3
|
argument-hint: "\"[rough idea or plan to stress-test]\""
|
|
4
4
|
---
|
|
5
5
|
Read and follow the DevRites skill at `.pi/skills/rite-pressure-test/SKILL.md`, applying it to: ${ARGUMENTS:-the current request}.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Express lane for a small reversible change: typo/copy/config, rate-limit constant, error message, local variable rename, feature flag, README link, one-file/function fix
|
|
2
|
+
description: "\"Express lane for a small reversible change: typo/copy/config, rate-limit constant, error message, local variable rename, feature flag, README link, one-file/function fix.\""
|
|
3
3
|
argument-hint: "\"<what to change>\""
|
|
4
4
|
---
|
|
5
5
|
Read and follow the DevRites skill at `.pi/skills/rite-quick/SKILL.md`, applying it to: ${ARGUMENTS:-the current request}.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "User-invoked read-only active-feature report: phase, active slice, next action, evidence, open questions, drift, risks, and handoff readiness
|
|
2
|
+
description: "\"User-invoked read-only active-feature report: phase, active slice, next action, evidence, open questions, drift, risks, and handoff readiness.\""
|
|
3
3
|
argument-hint: "\"[feature-slug]\""
|
|
4
4
|
---
|
|
5
5
|
Read and follow the DevRites skill at `.pi/skills/rite-status/SKILL.md`, applying it to: ${ARGUMENTS:-the current request}.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "User-invoked read-only structural map of unfamiliar code: modules, callers, callees, and relevant decisions
|
|
2
|
+
description: "\"User-invoked read-only structural map of unfamiliar code: modules, callers, callees, and relevant decisions.\""
|
|
3
3
|
argument-hint: "\"[symbol | file | area to map]\""
|
|
4
4
|
---
|
|
5
5
|
Read and follow the DevRites skill at `.pi/skills/rite-zoom-out/SKILL.md`, applying it to: ${ARGUMENTS:-the current request}.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-define
|
|
3
|
-
description: Define the first build plan from an approved spec: architecture, task slices, traceability, and state. Use when turning approved intent into its initial plan.
|
|
3
|
+
description: "Define the first build plan from an approved spec: architecture, task slices, traceability, and state. Use when turning approved intent into its initial plan."
|
|
4
4
|
argument-hint: "[feature-slug]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-handoff
|
|
3
|
-
description: User-invoked handoff writer: sync chat-only context into `.devrites/` and write a fresh-agent handoff.
|
|
3
|
+
description: "User-invoked handoff writer: sync chat-only context into `.devrites/` and write a fresh-agent handoff."
|
|
4
4
|
user-invocable: true
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
argument-hint: "[what the next session will focus on]"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-plan
|
|
3
|
-
description: Re-plan existing work when reality invalidates the plan: reslice a slice that is too big, repair drift, reorder dependencies, split boundaries, or unblock work. Not first-pass decomposition.
|
|
3
|
+
description: "Re-plan existing work when reality invalidates the plan: reslice a slice that is too big, repair drift, reorder dependencies, split boundaries, or unblock work. Not first-pass decomposition."
|
|
4
4
|
argument-hint: "[mode: decompose|reslice|repair|reorder|split|unblock|course-correct|revise]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-pressure-test
|
|
3
|
-
description: Pressure-test a rough/vague idea: ideate, explore 3-5 approaches, radically different shapes, diverge then converge on direction before spec. Not for writing spec.
|
|
3
|
+
description: "Pressure-test a rough/vague idea: ideate, explore 3-5 approaches, radically different shapes, diverge then converge on direction before spec. Not for writing spec."
|
|
4
4
|
argument-hint: "[rough idea or plan to stress-test]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-quick
|
|
3
|
-
description: Express lane for a small reversible change: typo/copy/config, rate-limit constant, error message, local variable rename, feature flag, README link, one-file/function fix.
|
|
3
|
+
description: "Express lane for a small reversible change: typo/copy/config, rate-limit constant, error message, local variable rename, feature flag, README link, one-file/function fix."
|
|
4
4
|
argument-hint: "<what to change>"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-status
|
|
3
|
-
description: User-invoked read-only active-feature report: phase, active slice, next action, evidence, open questions, drift, risks, and handoff readiness.
|
|
3
|
+
description: "User-invoked read-only active-feature report: phase, active slice, next action, evidence, open questions, drift, risks, and handoff readiness."
|
|
4
4
|
argument-hint: "[feature-slug]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
disable-model-invocation: true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-zoom-out
|
|
3
|
-
description: User-invoked read-only structural map of unfamiliar code: modules, callers, callees, and relevant decisions.
|
|
3
|
+
description: "User-invoked read-only structural map of unfamiliar code: modules, callers, callees, and relevant decisions."
|
|
4
4
|
argument-hint: "[symbol | file | area to map]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
disable-model-invocation: true
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "devrites",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.7.0",
|
|
4
4
|
"description": "DevRites: a disciplined senior-engineer workflow pack for Claude Code, Codex, omp, and pi",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"homepage": "https://github.com/ViktorsBaikers/DevRites#readme",
|
|
@@ -10,9 +10,18 @@ ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
|
|
|
10
10
|
PACK_SRC="$ROOT/pack/.claude"
|
|
11
11
|
OUT_ROOT="${DEVRITES_HOST_ARTIFACT_DIR:-$ROOT/pack/generated}"
|
|
12
12
|
|
|
13
|
-
[ -d "$PACK_SRC/skills" ] || {
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
[ -d "$PACK_SRC/skills" ] || {
|
|
14
|
+
echo "build-host-artifacts: missing $PACK_SRC/skills" >&2
|
|
15
|
+
exit 1
|
|
16
|
+
}
|
|
17
|
+
[ -d "$PACK_SRC/agents" ] || {
|
|
18
|
+
echo "build-host-artifacts: missing $PACK_SRC/agents" >&2
|
|
19
|
+
exit 1
|
|
20
|
+
}
|
|
21
|
+
[ -d "$PACK_SRC/workflows" ] || {
|
|
22
|
+
echo "build-host-artifacts: missing $PACK_SRC/workflows" >&2
|
|
23
|
+
exit 1
|
|
24
|
+
}
|
|
16
25
|
|
|
17
26
|
TMP_GEN_DIR="$(mktemp -d)"
|
|
18
27
|
cleanup() { rm -rf "$TMP_GEN_DIR"; }
|
|
@@ -26,79 +35,83 @@ trap cleanup EXIT
|
|
|
26
35
|
. "$ROOT/scripts/pi-generate.sh"
|
|
27
36
|
|
|
28
37
|
copy_tree() {
|
|
29
|
-
_src="$1"
|
|
38
|
+
_src="$1"
|
|
39
|
+
_dest="$2"
|
|
30
40
|
mkdir -p "$(dirname "$_dest")"
|
|
31
41
|
rm -rf "$_dest"
|
|
32
42
|
cp -R "$_src" "$_dest"
|
|
33
43
|
}
|
|
34
44
|
|
|
35
45
|
render_codex_skill_tree() {
|
|
36
|
-
_sd="$1"
|
|
46
|
+
_sd="$1"
|
|
47
|
+
_dest="$2"
|
|
37
48
|
mkdir -p "$_dest"
|
|
38
49
|
while IFS= read -r f; do
|
|
39
50
|
_r="${f#$_sd/}"
|
|
40
51
|
_out="$_dest/$_r"
|
|
41
52
|
mkdir -p "$(dirname "$_out")"
|
|
42
53
|
case "$_r" in
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
54
|
+
SKILL.md)
|
|
55
|
+
_implicit_disabled=0
|
|
56
|
+
if awk 'NR==1&&$0=="---"{fm=1;next} fm&&$0=="---"{exit} fm&&/^disable-model-invocation:[[:space:]]*true/{u=1} END{exit !u}' "$f"; then
|
|
57
|
+
_implicit_disabled=1
|
|
58
|
+
fi
|
|
59
|
+
gen_codex_skill_file "$f" "$_out"
|
|
60
|
+
if [ "$_implicit_disabled" -eq 1 ]; then
|
|
61
|
+
mkdir -p "$_dest/agents"
|
|
62
|
+
printf 'policy:\n allow_implicit_invocation: false\n' >"$_dest/agents/openai.yaml"
|
|
63
|
+
fi
|
|
64
|
+
;;
|
|
65
|
+
*.md)
|
|
66
|
+
gen_codex_markdown_file "$f" "$_out"
|
|
67
|
+
;;
|
|
68
|
+
*)
|
|
69
|
+
cp "$f" "$_out"
|
|
70
|
+
;;
|
|
60
71
|
esac
|
|
61
72
|
done < <(find "$_sd" -type f)
|
|
62
73
|
}
|
|
63
74
|
|
|
64
75
|
render_omp_skill_tree() {
|
|
65
|
-
_sd="$1"
|
|
76
|
+
_sd="$1"
|
|
77
|
+
_dest="$2"
|
|
66
78
|
mkdir -p "$_dest"
|
|
67
79
|
while IFS= read -r f; do
|
|
68
80
|
_r="${f#$_sd/}"
|
|
69
81
|
_out="$_dest/$_r"
|
|
70
82
|
mkdir -p "$(dirname "$_out")"
|
|
71
83
|
case "$_r" in
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
84
|
+
SKILL.md)
|
|
85
|
+
gen_omp_skill_file "$f" "$_out"
|
|
86
|
+
;;
|
|
87
|
+
*.md)
|
|
88
|
+
gen_omp_markdown_file "$f" "$_out"
|
|
89
|
+
;;
|
|
90
|
+
*)
|
|
91
|
+
cp "$f" "$_out"
|
|
92
|
+
;;
|
|
81
93
|
esac
|
|
82
94
|
done < <(find "$_sd" -type f)
|
|
83
95
|
}
|
|
84
96
|
|
|
85
97
|
render_pi_skill_tree() {
|
|
86
|
-
_sd="$1"
|
|
98
|
+
_sd="$1"
|
|
99
|
+
_dest="$2"
|
|
87
100
|
mkdir -p "$_dest"
|
|
88
101
|
while IFS= read -r f; do
|
|
89
102
|
_r="${f#$_sd/}"
|
|
90
103
|
_out="$_dest/$_r"
|
|
91
104
|
mkdir -p "$(dirname "$_out")"
|
|
92
105
|
case "$_r" in
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
106
|
+
SKILL.md)
|
|
107
|
+
gen_pi_skill_file "$f" "$_out"
|
|
108
|
+
;;
|
|
109
|
+
*.md)
|
|
110
|
+
gen_pi_markdown_file "$f" "$_out"
|
|
111
|
+
;;
|
|
112
|
+
*)
|
|
113
|
+
cp "$f" "$_out"
|
|
114
|
+
;;
|
|
102
115
|
esac
|
|
103
116
|
done < <(find "$_sd" -type f)
|
|
104
117
|
}
|
|
@@ -155,9 +168,9 @@ while IFS= read -r d; do
|
|
|
155
168
|
[ "$name" = ".impeccable" ] && continue
|
|
156
169
|
render_pi_skill_tree "$d" "$OUT_ROOT/pi/skills/$name"
|
|
157
170
|
case "$name" in
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
171
|
+
rite | rite-*)
|
|
172
|
+
gen_pi_prompt_stub "$d/SKILL.md" "$name" "$OUT_ROOT/pi/prompts/$name.md"
|
|
173
|
+
;;
|
|
161
174
|
esac
|
|
162
175
|
done < <(find "$PACK_SRC/skills" -mindepth 1 -maxdepth 1 -type d)
|
|
163
176
|
|
|
@@ -168,7 +181,7 @@ done < <(find "$PACK_SRC/agents" -maxdepth 1 -type f -name '*.md')
|
|
|
168
181
|
|
|
169
182
|
gen_pi_agents_bridge "$OUT_ROOT/pi/AGENTS.md"
|
|
170
183
|
|
|
171
|
-
cat >
|
|
184
|
+
cat >"$OUT_ROOT/README.md" <<'EOF'
|
|
172
185
|
# Generated DevRites Host Artifacts
|
|
173
186
|
|
|
174
187
|
This directory is generated by `scripts/build-host-artifacts.sh`.
|
package/scripts/pi-generate.sh
CHANGED
|
@@ -56,7 +56,7 @@ gen_pi_markdown_file() {
|
|
|
56
56
|
-e 's#verb dispatches to the matching `rite-<verb>` skill#verb invokes the matching `rite-<verb>` skill#g' \
|
|
57
57
|
-e 's#the dispatch map only#the invocation map only#g' \
|
|
58
58
|
-e 's#→ dispatch per the table above#→ invoke the matching skill per the table above#g' \
|
|
59
|
-
"$_src" >
|
|
59
|
+
"$_src" >"$_out"
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
gen_pi_skill_file() {
|
|
@@ -88,15 +88,15 @@ _pi_map_tools() {
|
|
|
88
88
|
_tok="${_tok%"${_tok##*[![:space:]]}"}"
|
|
89
89
|
[ -z "$_tok" ] && continue
|
|
90
90
|
case "$_tok" in
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
91
|
+
Read | read) _mapped="read" ;;
|
|
92
|
+
Edit | edit) _mapped="edit" ;;
|
|
93
|
+
Write | write) _mapped="write" ;;
|
|
94
|
+
Bash | bash) _mapped="bash" ;;
|
|
95
|
+
Grep | grep) _mapped="grep" ;;
|
|
96
|
+
Glob | glob) _mapped="find" ;;
|
|
97
|
+
LS | ls) _mapped="ls" ;;
|
|
98
|
+
Skill | skill) continue ;;
|
|
99
|
+
*) continue ;;
|
|
100
100
|
esac
|
|
101
101
|
_out="${_out}${_sep}${_mapped}"
|
|
102
102
|
_sep=", "
|
|
@@ -129,7 +129,7 @@ gen_pi_agent() {
|
|
|
129
129
|
_tools="$(_pi_map_tools "$_tools_raw" "$_name")"
|
|
130
130
|
_desc_tmp="$TMP_GEN_DIR/pi-agent-desc-$(basename "$_src").txt"
|
|
131
131
|
_desc_pi="$TMP_GEN_DIR/pi-agent-desc-$(basename "$_src").pi.txt"
|
|
132
|
-
printf '%s' "$_desc" >
|
|
132
|
+
printf '%s' "$_desc" >"$_desc_tmp"
|
|
133
133
|
gen_pi_markdown_file "$_desc_tmp" "$_desc_pi"
|
|
134
134
|
_desc="$(cat "$_desc_pi")"
|
|
135
135
|
[ -n "$_desc" ] || _desc="DevRites custom agent."
|
|
@@ -144,10 +144,10 @@ gen_pi_agent() {
|
|
|
144
144
|
printf '%s\n' "---"
|
|
145
145
|
_body_tmp="$TMP_GEN_DIR/pi-agent-body-$(basename "$_src").md"
|
|
146
146
|
_body_pi="$TMP_GEN_DIR/pi-agent-body-$(basename "$_src").pi.md"
|
|
147
|
-
awk 'NR==1 && $0=="---"{fm=1; next} fm && $0=="---"{fm=0; body=1; next} body{print}' "$_src" >
|
|
147
|
+
awk 'NR==1 && $0=="---"{fm=1; next} fm && $0=="---"{fm=0; body=1; next} body{print}' "$_src" >"$_body_tmp"
|
|
148
148
|
gen_pi_markdown_file "$_body_tmp" "$_body_pi"
|
|
149
149
|
cat "$_body_pi"
|
|
150
|
-
} >
|
|
150
|
+
} >"$_out"
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
# Write a pi prompt template that preserves the public /<name> command form.
|
|
@@ -166,12 +166,12 @@ gen_pi_prompt_stub() {
|
|
|
166
166
|
[ -n "$_hint" ] && printf 'argument-hint: "%s"\n' "$(pi_yaml_escape "$_hint")"
|
|
167
167
|
printf '%s\n' "---"
|
|
168
168
|
printf 'Read and follow the DevRites skill at `.pi/skills/%s/SKILL.md`, applying it to: ${ARGUMENTS:-the current request}.\n' "$_name"
|
|
169
|
-
} >
|
|
169
|
+
} >"$_out"
|
|
170
170
|
}
|
|
171
171
|
|
|
172
172
|
gen_pi_agents_bridge() {
|
|
173
173
|
_out="$1"
|
|
174
|
-
cat >
|
|
174
|
+
cat >"$_out" <<'EOF'
|
|
175
175
|
<!-- BEGIN DEVRITES PI -->
|
|
176
176
|
## DevRites For pi
|
|
177
177
|
|