@jenga-ai/agent 2.0.0 → 3.1.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/README.md +82 -243
- package/agents/developer.md +5 -5
- package/agents/scrum-master.md +23 -23
- package/agents/tester.md +5 -5
- package/bin/jenga.js +10 -0
- package/hooks/copilot_session_end.sh +7 -3
- package/hooks/prompt_router_helper.js +17 -5
- package/lib/commands/doctor.js +351 -0
- package/lib/commands/init.js +16 -0
- package/lib/generate-copilot-hooks.js +116 -0
- package/lib/generate-skill-allow-list.js +9 -3
- package/lib/legacy-shipped-paths.json +336 -0
- package/lib/postinstall-manifest.js +469 -0
- package/lib/skill-allow-list.json +2 -3
- package/package.json +16 -25
- package/scripts/apply-j-prefix.sh +25 -12
- package/scripts/generate-j-alias.sh +333 -0
- package/scripts/generate-legacy-shipped-paths.js +248 -0
- package/scripts/postinstall.js +205 -2
- package/scripts/verify-legacy-seed-reconcile.sh +254 -0
- package/scripts/verify-postinstall-reconcile.sh +392 -0
- package/skills/{brainstorm → j-brainstorm}/SKILL.md +9 -2
- package/skills/{btw → j-btw}/SKILL.md +9 -2
- package/skills/{clearify → j-clearify}/SKILL.md +9 -2
- package/skills/{close-story → j-close-story}/SKILL.md +17 -10
- package/skills/{close-story → j-close-story}/scripts/check-privatized.sh +2 -2
- package/skills/{close-story → j-close-story}/scripts/check-story-closeable.sh +1 -1
- package/skills/{close-story → j-close-story}/scripts/extract-task-diff-stats.sh +1 -1
- package/skills/{commit → j-commit}/SKILL.md +9 -2
- package/skills/j-continue/SKILL.md +36 -0
- package/skills/{deep-dive → j-deep-dive}/SKILL.md +9 -8
- package/skills/{dev-done → j-dev-done}/SKILL.md +11 -4
- package/skills/{dev-done → j-dev-done}/scripts/classify-commit-outcome.sh +4 -4
- package/skills/{distribute → j-distribute}/SKILL.md +17 -10
- package/skills/{distribute → j-distribute}/scripts/distribute-changes.sh +1 -1
- package/skills/{do → j-do}/SKILL.md +12 -5
- package/skills/{doc → j-doc}/README.md +5 -5
- package/skills/{doc → j-doc}/SKILL.md +15 -8
- package/skills/{doc → j-doc}/authoring-notes.md +1 -1
- package/skills/{doc-sync → j-doc-sync}/SKILL.md +9 -2
- package/skills/{dooo → j-dooo}/SKILL.md +9 -2
- package/skills/j-error/SKILL.md +36 -0
- package/skills/{evaluate → j-evaluate}/SKILL.md +9 -2
- package/skills/j-examplify/SKILL.md +49 -0
- package/skills/{help → j-help}/SKILL.md +9 -2
- package/skills/{idea → j-idea}/SKILL.md +10 -3
- package/skills/{idea → j-idea}/assets/idea_handoff_template.md +1 -1
- package/skills/{improve → j-improve}/SKILL.md +9 -2
- package/skills/j-init/SKILL.md +2 -2
- package/skills/j-jbp/SKILL.md +32 -0
- package/skills/j-lgtm/SKILL.md +28 -0
- package/skills/{pi-plan → j-pi-plan}/SKILL.md +10 -3
- package/skills/{proceed → j-proceed}/SKILL.md +9 -2
- package/skills/{publish → j-publish}/SKILL.md +47 -40
- package/skills/{publish → j-publish}/adapters/droplet.md +1 -1
- package/skills/{publish → j-publish}/adapters/mobile-ios.md +3 -3
- package/skills/{publish → j-publish}/adapters/npm-ci.md +3 -3
- package/skills/{publish → j-publish}/adapters/npm.md +8 -8
- package/skills/{publish → j-publish}/assets/ci-contract.md +2 -2
- package/skills/{publish → j-publish}/schemas/publish.schema.json +1 -1
- package/skills/{publish → j-publish}/scripts/npm_stage_inspect.sh +34 -1
- package/skills/{publish → j-publish}/scripts/npm_stage_pipeline.sh +9 -4
- package/skills/{publish → j-publish}/scripts/publish_deploy.sh +4 -4
- package/skills/{publish → j-publish}/scripts/validate_npm_stage_env.sh +1 -1
- package/skills/{publish → j-publish}/wizards/droplet.md +1 -1
- package/skills/{publish → j-publish}/wizards/mobile-ios.md +1 -1
- package/skills/{publish → j-publish}/wizards/npm-ci.md +1 -1
- package/skills/{publish → j-publish}/wizards/npm.md +1 -1
- package/skills/{reconcile → j-reconcile}/SKILL.md +12 -5
- package/skills/{reconcile → j-reconcile}/scripts/detect-unlinked-code.sh +2 -2
- package/skills/{reconcile → j-reconcile}/scripts/resolve-reconcile-scope.sh +3 -3
- package/skills/{reconcile-origin → j-reconcile-origin}/SKILL.md +13 -6
- package/skills/{redo → j-redo}/SKILL.md +9 -2
- package/skills/{skillify → j-skillify}/SKILL.md +10 -3
- package/skills/{spinoff → j-spinoff}/SKILL.md +9 -2
- package/skills/{status → j-status}/SKILL.md +9 -2
- package/skills/{todo → j-todo}/SKILL.md +10 -3
- package/skills/{todo → j-todo}/assets/todo_handoff_template.md +1 -1
- package/skills/{todo → j-todo}/scripts/add_trivial_task.sh +3 -3
- package/skills/{todo → j-todo}/scripts/update_story_tasks.py +2 -2
- package/skills/{uncharted → j-uncharted}/SKILL.md +35 -28
- package/skills/{uncharted → j-uncharted}/assets/UNDERSTANDING_DOC_TEMPLATE.md +2 -2
- package/skills/{uncharted → j-uncharted}/scripts/detect-dependencies.sh +1 -1
- package/skills/{uncharted → j-uncharted}/scripts/detect-tests.sh +1 -1
- package/skills/{uncharted → j-uncharted}/scripts/directory-triage.sh +3 -3
- package/skills/{uncharted → j-uncharted}/scripts/elicitation-state.sh +3 -3
- package/skills/{uncharted → j-uncharted}/scripts/enumerate-target.sh +1 -1
- package/skills/{uncharted → j-uncharted}/scripts/import-source.sh +1 -1
- package/skills/{uncharted → j-uncharted}/scripts/inspect-provenance.sh +1 -1
- package/skills/{uncharted → j-uncharted}/scripts/resolve-segment-target.sh +5 -5
- package/skills/{uncharted → j-uncharted}/scripts/run-engine.sh +1 -1
- package/skills/{uncharted → j-uncharted}/scripts/validate-proposed-items.sh +2 -2
- package/skills/{uncharted → j-uncharted}/scripts/write-backfilled-epics.sh +1 -1
- package/skills/j-wtf/SKILL.md +27 -0
- package/skills/jenga/SKILL.md +1 -1
- package/skills/jenga-permission-level/SKILL.md +1 -1
- package/templates/SCRUM_BOARD_SCHEMA.md +1 -1
- package/templates/agent-context.md.tpl +10 -10
- package/templates/copilot-instructions.md.tpl +89 -19
- package/skills/continue/SKILL.md +0 -29
- package/skills/error/SKILL.md +0 -29
- package/skills/examplify/SKILL.md +0 -42
- package/skills/init/SKILL.md +0 -155
- package/skills/init/assets/scope-thresholds_template.json +0 -7
- package/skills/init/assets/strategy_stub_template.md +0 -38
- package/skills/init/assets/workflow_template.json +0 -30
- package/skills/init/scripts/apply-project-visibility.sh +0 -176
- package/skills/init/scripts/detect-existing-codebase.sh +0 -166
- package/skills/init/scripts/init.sh +0 -116
- package/skills/jbp/SKILL.md +0 -25
- package/skills/lgtm/SKILL.md +0 -21
- package/skills/skillify/assets/init-new/assets/.gitignore_template +0 -15
- package/skills/skillify/assets/init-new/assets/PROJECT_SUMMARY_template.md +0 -13
- package/skills/skillify/assets/init-new/assets/directory_structure.txt +0 -14
- package/skills/skillify/assets/init-new/assets/test-config_template.json +0 -4
- package/skills/wtf/SKILL.md +0 -20
- /package/skills/{close-story → j-close-story}/scripts/compute-scope-divergence.sh +0 -0
- /package/skills/{close-story → j-close-story}/scripts/extract-diff-stats.sh +0 -0
- /package/skills/{close-story → j-close-story}/scripts/update-task-frontmatter.sh +0 -0
- /package/skills/{commit → j-commit}/assets/user_instructions_template.md +0 -0
- /package/skills/{distribute → j-distribute}/CONFIG_SCHEMA.md +0 -0
- /package/skills/{distribute → j-distribute}/scripts/check-version.sh +0 -0
- /package/skills/{distribute → j-distribute}/scripts/commit-version-bump.sh +0 -0
- /package/skills/{do → j-do}/assets/intent-vs-diff-prompt.md +0 -0
- /package/skills/{do → j-do}/assets/sender_template.json +0 -0
- /package/skills/{doc → j-doc}/assets/path-objectives.yaml +0 -0
- /package/skills/{doc → j-doc}/scripts/resolve_last_update.py +0 -0
- /package/skills/{doc-sync → j-doc-sync}/assets/default_excludes.txt +0 -0
- /package/skills/{doc-sync → j-doc-sync}/assets/doc_targets.md +0 -0
- /package/skills/{evaluate → j-evaluate}/assets/evaluation_invokation_template.yml +0 -0
- /package/skills/{evaluate → j-evaluate}/assets/evaluation_rapport_template.md +0 -0
- /package/skills/{idea → j-idea}/assets/idea_template.md +0 -0
- /package/skills/{pi-plan → j-pi-plan}/assets/epic.json +0 -0
- /package/skills/{pi-plan → j-pi-plan}/assets/story_template.md +0 -0
- /package/skills/{publish → j-publish}/assets/ExportOptions.plist.template +0 -0
- /package/skills/{publish → j-publish}/assets/ownership-matrix.md +0 -0
- /package/skills/{publish → j-publish}/assets/publish.example.json +0 -0
- /package/skills/{publish → j-publish}/assets/publish.example.npm-ci.json +0 -0
- /package/skills/{publish → j-publish}/assets/publish.example.npm.json +0 -0
- /package/skills/{publish → j-publish}/assets/secrets-guide.md +0 -0
- /package/skills/{publish → j-publish}/schemas/fixtures/npm-ci-minimal.json +0 -0
- /package/skills/{publish → j-publish}/schemas/fixtures/npm-ci-with-empty-secrets.json +0 -0
- /package/skills/{publish → j-publish}/schemas/fixtures/npm-ci-with-workflow-path.json +0 -0
- /package/skills/{publish → j-publish}/scripts/check_target_config.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/droplet_pipeline.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/finalize_changelog.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/generate_release_notes.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/ios_pipeline.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/npm_ci_pipeline.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/npm_pipeline.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/publish_common.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/reconcile_tags.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/run_gates.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/setup_wizard.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/show_history.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/suggest_semver_bump.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/validate_config.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/validate_droplet_env.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/validate_ios_env.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/validate_npm_ci_env.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/validate_npm_env.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/write_ledger_entry.sh +0 -0
- /package/skills/{reconcile → j-reconcile}/assets/report_format.md +0 -0
- /package/skills/{reconcile-origin → j-reconcile-origin}/scripts/reconcile-origin.sh +0 -0
- /package/skills/{skillify → j-skillify}/assets/init-new/SKILL.md +0 -0
- /package/skills/{init → j-skillify/assets/init-new}/assets/.gitignore_template +0 -0
- /package/skills/{init → j-skillify/assets/init-new}/assets/PROJECT_SUMMARY_template.md +0 -0
- /package/skills/{init → j-skillify/assets/init-new}/assets/directory_structure.txt +0 -0
- /package/skills/{init → j-skillify/assets/init-new}/assets/test-config_template.json +0 -0
- /package/skills/{skillify → j-skillify}/assets/init-new/assets/workflow_template.json +0 -0
- /package/skills/{skillify → j-skillify}/assets/init-new/scripts/init.sh +0 -0
- /package/skills/{skillify → j-skillify}/assets/init-old/SKILL.md +0 -0
- /package/skills/{status → j-status}/assets/output_format.md +0 -0
- /package/skills/{todo → j-todo}/assets/todo_template.md +0 -0
- /package/skills/{uncharted → j-uncharted}/assets/SEGMENT_PROPOSAL_TEMPLATE.md +0 -0
- /package/skills/{uncharted → j-uncharted}/scripts/apply-subsystem-cap.sh +0 -0
- /package/skills/{uncharted → j-uncharted}/scripts/discover-subsystems.sh +0 -0
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# ---------------------------------------------------------------------------
|
|
3
|
-
# skills/init/scripts/detect-existing-codebase.sh
|
|
4
|
-
#
|
|
5
|
-
# Deterministic front half of the /init "detect existing project state" step.
|
|
6
|
-
# /init currently always scaffolds as though the target directory were empty.
|
|
7
|
-
# That is wrong whenever a directory already carries a Jenga scaffold, or
|
|
8
|
-
# already carries substantial application code that predates Jenga entirely
|
|
9
|
-
# -- in the second case, scaffolding fresh produces an empty board and a stub
|
|
10
|
-
# PROJECT_SUMMARY.md that actively misrepresent the project.
|
|
11
|
-
#
|
|
12
|
-
# This script answers exactly one question -- "what kind of directory is
|
|
13
|
-
# this?" -- and nothing else. It never scaffolds, never prompts, never runs
|
|
14
|
-
# /uncharted, and never modifies anything on disk. Deciding what to DO with
|
|
15
|
-
# the verdict is agent judgement and lives in skills/init/SKILL.md.
|
|
16
|
-
#
|
|
17
|
-
# ---------------------------------------------------------------------------
|
|
18
|
-
# VERDICTS -- exactly one is printed on stdout, nothing else
|
|
19
|
-
# ---------------------------------------------------------------------------
|
|
20
|
-
# empty The target is empty, or contains only boilerplate
|
|
21
|
-
# that does not count as "there is a project here":
|
|
22
|
-
# .git (the directory itself, pruned entirely -- not
|
|
23
|
-
# merely excluded by name), .gitignore, and top-level
|
|
24
|
-
# README*/LICENSE*/LICENCE* files (case-insensitive),
|
|
25
|
-
# plus anything git itself reports as ignored. A repo
|
|
26
|
-
# containing only a README is empty for this purpose.
|
|
27
|
-
# already-scaffolded The target already carries a Jenga scaffold: any one
|
|
28
|
-
# of project/board/, project/PROJECT_SUMMARY.md, or
|
|
29
|
-
# project/configs/workflow.json is present. Checked
|
|
30
|
-
# BEFORE the emptiness scan, so a scaffolded project
|
|
31
|
-
# that also happens to look sparse is never misreported
|
|
32
|
-
# as "empty".
|
|
33
|
-
# existing-codebase The target has real content (source files, configs,
|
|
34
|
-
# docs beyond the boilerplate list above, etc.) and is
|
|
35
|
-
# not already Jenga-scaffolded. This is the case /init
|
|
36
|
-
# currently mishandles: scaffolding fresh here silently
|
|
37
|
-
# discards the fact that pre-existing code exists.
|
|
38
|
-
#
|
|
39
|
-
# ---------------------------------------------------------------------------
|
|
40
|
-
# NOTES ON GITIGNORE HANDLING
|
|
41
|
-
# ---------------------------------------------------------------------------
|
|
42
|
-
# /init runs this check BEFORE `git init` in the fresh-scaffold path, so the
|
|
43
|
-
# target directory is very often not a git work tree yet. Gitignore-based
|
|
44
|
-
# filtering is therefore best-effort: it only runs when the target already
|
|
45
|
-
# has a `.git` directory AND `git` is on PATH. A standalone `.gitignore` file
|
|
46
|
-
# with no repository behind it still counts as boilerplate via the name-based
|
|
47
|
-
# exclusion below -- it just cannot hide any OTHER file, because there is no
|
|
48
|
-
# git to ask "is this ignored".
|
|
49
|
-
#
|
|
50
|
-
# README/LICENSE exclusion applies to TOP-LEVEL entries only. A directory
|
|
51
|
-
# whose only content is a buried `docs/README.md` two levels down is real
|
|
52
|
-
# structure, not boilerplate, and must not be reported as empty.
|
|
53
|
-
#
|
|
54
|
-
# ---------------------------------------------------------------------------
|
|
55
|
-
# Usage
|
|
56
|
-
# ---------------------------------------------------------------------------
|
|
57
|
-
# detect-existing-codebase.sh [target-dir]
|
|
58
|
-
#
|
|
59
|
-
# target-dir Directory to classify. Default: current directory.
|
|
60
|
-
#
|
|
61
|
-
# Options:
|
|
62
|
-
# -h, --help Show this help and exit 0.
|
|
63
|
-
#
|
|
64
|
-
# Exit codes:
|
|
65
|
-
# 0 A verdict was printed on stdout.
|
|
66
|
-
# 1 Usage error (unknown option, more than one positional argument).
|
|
67
|
-
# 2 target-dir does not exist or is not a directory.
|
|
68
|
-
#
|
|
69
|
-
# Requires: bash, find. git is used opportunistically for gitignore
|
|
70
|
-
# filtering when the target is already a git work tree; its absence never
|
|
71
|
-
# causes a failure.
|
|
72
|
-
# ---------------------------------------------------------------------------
|
|
73
|
-
|
|
74
|
-
set -euo pipefail
|
|
75
|
-
|
|
76
|
-
SELF="$(basename "$0")"
|
|
77
|
-
|
|
78
|
-
usage() {
|
|
79
|
-
sed -n '/^# Usage$/,/^# Requires:/p' "$0" | sed -e 's/^# \{0,1\}//' -e '/^-\{10,\}$/d'
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
die_usage() {
|
|
83
|
-
printf '%s: error: %s\n' "$SELF" "$*" >&2
|
|
84
|
-
echo >&2
|
|
85
|
-
usage >&2
|
|
86
|
-
exit 1
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
TARGET_DIR="."
|
|
90
|
-
HAVE_TARGET=0
|
|
91
|
-
|
|
92
|
-
while [ "$#" -gt 0 ]; do
|
|
93
|
-
case "$1" in
|
|
94
|
-
-h|--help) usage; exit 0 ;;
|
|
95
|
-
--)
|
|
96
|
-
shift
|
|
97
|
-
[ "$#" -le 1 ] || die_usage "at most one target directory is allowed"
|
|
98
|
-
if [ "$#" -eq 1 ]; then TARGET_DIR="$1"; HAVE_TARGET=1; fi
|
|
99
|
-
shift $#
|
|
100
|
-
;;
|
|
101
|
-
-*)
|
|
102
|
-
die_usage "unknown option \"$1\"" ;;
|
|
103
|
-
*)
|
|
104
|
-
[ "$HAVE_TARGET" -eq 0 ] || die_usage "at most one target directory is allowed (got \"$TARGET_DIR\" and \"$1\")"
|
|
105
|
-
TARGET_DIR="$1"; HAVE_TARGET=1; shift ;;
|
|
106
|
-
esac
|
|
107
|
-
done
|
|
108
|
-
|
|
109
|
-
[ -d "$TARGET_DIR" ] || { printf '%s: error: not a directory: %s\n' "$SELF" "$TARGET_DIR" >&2; exit 2; }
|
|
110
|
-
|
|
111
|
-
TARGET_DIR="$(cd -- "$TARGET_DIR" && pwd -P)"
|
|
112
|
-
|
|
113
|
-
# --- already-scaffolded: checked first, independent of emptiness -----------
|
|
114
|
-
if [ -d "$TARGET_DIR/project/board" ] \
|
|
115
|
-
|| [ -f "$TARGET_DIR/project/PROJECT_SUMMARY.md" ] \
|
|
116
|
-
|| [ -f "$TARGET_DIR/project/configs/workflow.json" ]; then
|
|
117
|
-
echo "already-scaffolded"
|
|
118
|
-
exit 0
|
|
119
|
-
fi
|
|
120
|
-
|
|
121
|
-
# --- enumerate candidate files, pruning .git entirely -----------------------
|
|
122
|
-
ALL_FILES=$(mktemp "${TMPDIR:-/tmp}/detect-existing-codebase.XXXXXX")
|
|
123
|
-
IGNORED_FILES=$(mktemp "${TMPDIR:-/tmp}/detect-existing-codebase-ignored.XXXXXX")
|
|
124
|
-
cleanup() { rm -f "$ALL_FILES" "$IGNORED_FILES"; }
|
|
125
|
-
trap cleanup EXIT
|
|
126
|
-
|
|
127
|
-
find "$TARGET_DIR" -path "$TARGET_DIR/.git" -prune -o -type f -print > "$ALL_FILES"
|
|
128
|
-
|
|
129
|
-
# --- best-effort gitignore filtering ----------------------------------------
|
|
130
|
-
: > "$IGNORED_FILES"
|
|
131
|
-
if [ -d "$TARGET_DIR/.git" ] && command -v git >/dev/null 2>&1; then
|
|
132
|
-
git -C "$TARGET_DIR" check-ignore --stdin < "$ALL_FILES" > "$IGNORED_FILES" 2>/dev/null || true
|
|
133
|
-
fi
|
|
134
|
-
|
|
135
|
-
# --- classify each candidate -------------------------------------------------
|
|
136
|
-
SOURCE_FOUND=0
|
|
137
|
-
while IFS= read -r f; do
|
|
138
|
-
[ -n "$f" ] || continue
|
|
139
|
-
|
|
140
|
-
if [ -s "$IGNORED_FILES" ] && grep -Fxq -- "$f" "$IGNORED_FILES"; then
|
|
141
|
-
continue
|
|
142
|
-
fi
|
|
143
|
-
|
|
144
|
-
rel="${f#"$TARGET_DIR"/}"
|
|
145
|
-
base="$(basename -- "$f")"
|
|
146
|
-
dir_rel="$(dirname -- "$rel")"
|
|
147
|
-
|
|
148
|
-
if [ "$dir_rel" = "." ]; then
|
|
149
|
-
if [ "$base" = ".gitignore" ]; then
|
|
150
|
-
continue
|
|
151
|
-
fi
|
|
152
|
-
base_upper="$(printf '%s' "$base" | tr '[:lower:]' '[:upper:]')"
|
|
153
|
-
case "$base_upper" in
|
|
154
|
-
README*|LICENSE*|LICENCE*) continue ;;
|
|
155
|
-
esac
|
|
156
|
-
fi
|
|
157
|
-
|
|
158
|
-
SOURCE_FOUND=1
|
|
159
|
-
break
|
|
160
|
-
done < "$ALL_FILES"
|
|
161
|
-
|
|
162
|
-
if [ "$SOURCE_FOUND" -eq 1 ]; then
|
|
163
|
-
echo "existing-codebase"
|
|
164
|
-
else
|
|
165
|
-
echo "empty"
|
|
166
|
-
fi
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
|
-
ASSETS_DIR="$SCRIPT_DIR/../assets"
|
|
6
|
-
VISIBILITY_SCRIPT="$SCRIPT_DIR/apply-project-visibility.sh"
|
|
7
|
-
|
|
8
|
-
# ─── Resolve the package root that owns templates/ and lib/ ──────────────────
|
|
9
|
-
# postinstall.js mirrors only skills/ and agents/ into .claude/ and .agents/ —
|
|
10
|
-
# templates/ and lib/ are never copied there, so a script running from a
|
|
11
|
-
# mirrored copy (.claude/skills/init/scripts/ or .agents/skills/init/scripts/)
|
|
12
|
-
# cannot reach its siblings via a fixed ../../../ climb the way it can in this
|
|
13
|
-
# monorepo checkout, where init.sh actually lives at skills/init/scripts/ with
|
|
14
|
-
# templates/ and lib/ three levels up. Consumers instead have them inside the
|
|
15
|
-
# installed npm package.
|
|
16
|
-
if [[ -d "$SCRIPT_DIR/../../../templates" ]]; then
|
|
17
|
-
PKG_ROOT="$SCRIPT_DIR/../../.."
|
|
18
|
-
elif [[ -d "$PWD/node_modules/@jenga-ai/agent/templates" ]]; then
|
|
19
|
-
PKG_ROOT="$PWD/node_modules/@jenga-ai/agent"
|
|
20
|
-
else
|
|
21
|
-
echo "Error: could not locate the jenga-agent package root (templates/ not found via monorepo checkout or node_modules/@jenga-ai/agent)." >&2
|
|
22
|
-
exit 1
|
|
23
|
-
fi
|
|
24
|
-
|
|
25
|
-
# ─── 0. Resolve project_files_visibility ─────────────────────────────────────
|
|
26
|
-
# Defaults to `visible` — the only value that touches nothing on disk — so an
|
|
27
|
-
# unattended run can never silently relocate directories or edit .gitignore.
|
|
28
|
-
VISIBILITY="${JENGA_PROJECT_FILES_VISIBILITY:-visible}"
|
|
29
|
-
|
|
30
|
-
while [[ $# -gt 0 ]]; do
|
|
31
|
-
case "$1" in
|
|
32
|
-
--visibility) VISIBILITY="${2:-}"; shift 2 ;;
|
|
33
|
-
--visibility=*) VISIBILITY="${1#*=}"; shift ;;
|
|
34
|
-
*) echo "Unknown argument: $1" >&2
|
|
35
|
-
echo "Usage: $(basename "$0") [--visibility <visible|ignored>]" >&2
|
|
36
|
-
exit 1 ;;
|
|
37
|
-
esac
|
|
38
|
-
done
|
|
39
|
-
|
|
40
|
-
# Validate before scaffolding so a typo cannot leave a half-initialised project.
|
|
41
|
-
bash "$VISIBILITY_SCRIPT" --check-only "$VISIBILITY"
|
|
42
|
-
|
|
43
|
-
# ─── 1. Initialize git repository ────────────────────────────────────────────
|
|
44
|
-
echo "→ Initializing git repository..."
|
|
45
|
-
git init
|
|
46
|
-
|
|
47
|
-
# ─── 2. Create .gitignore ─────────────────────────────────────────────────────
|
|
48
|
-
echo "→ Copying .gitignore from template..."
|
|
49
|
-
cp "$ASSETS_DIR/.gitignore_template" .gitignore
|
|
50
|
-
|
|
51
|
-
# ─── 3. Scaffold directory structure ──────────────────────────────────────────
|
|
52
|
-
echo "→ Scaffolding directory structure..."
|
|
53
|
-
while IFS= read -r dir || [[ -n "$dir" ]]; do
|
|
54
|
-
[[ -z "$dir" || "$dir" == \#* ]] && continue
|
|
55
|
-
mkdir -p "$dir"
|
|
56
|
-
done < "$ASSETS_DIR/directory_structure.txt"
|
|
57
|
-
|
|
58
|
-
# ─── 4. Create project/PROJECT_SUMMARY.md ────────────────────────────────────
|
|
59
|
-
echo "→ Copying PROJECT_SUMMARY.md from template..."
|
|
60
|
-
cp "$ASSETS_DIR/PROJECT_SUMMARY_template.md" project/PROJECT_SUMMARY.md
|
|
61
|
-
|
|
62
|
-
# ─── 5. Create project/configs/workflow.json ─────────────────────────────────
|
|
63
|
-
echo "→ Copying workflow.json from template..."
|
|
64
|
-
cp "$ASSETS_DIR/workflow_template.json" project/configs/workflow.json
|
|
65
|
-
|
|
66
|
-
# ─── 6. Create project/configs/test-config.json stub ─────────────────────────
|
|
67
|
-
echo "→ Copying test-config.json from template..."
|
|
68
|
-
cp "$ASSETS_DIR/test-config_template.json" project/configs/test-config.json
|
|
69
|
-
|
|
70
|
-
# ─── 6.5. Create project/configs/scope-thresholds.json ───────────────────────
|
|
71
|
-
# Consumed by skills/jenga (Phase 0) and skills/do (Step 0); both halt if it's
|
|
72
|
-
# missing, so it must exist immediately after scaffold.
|
|
73
|
-
echo "→ Copying scope-thresholds.json from template..."
|
|
74
|
-
cp "$ASSETS_DIR/scope-thresholds_template.json" project/configs/scope-thresholds.json
|
|
75
|
-
|
|
76
|
-
# ─── 7. Create project/data/baselines.json ───────────────────────────────────
|
|
77
|
-
echo "→ Creating baselines.json..."
|
|
78
|
-
echo '{}' > project/data/baselines.json
|
|
79
|
-
|
|
80
|
-
# ─── 8. Create project/logs/events.json ──────────────────────────────────────
|
|
81
|
-
echo "→ Creating events.json..."
|
|
82
|
-
echo '[]' > project/logs/events.json
|
|
83
|
-
|
|
84
|
-
# ─── 9. Create docs/STRATEGY.md ──────────────────────────────────────────────
|
|
85
|
-
echo "→ Creating docs/STRATEGY.md (strategic brief for investors, partners, and the product team)..."
|
|
86
|
-
mkdir -p docs
|
|
87
|
-
cp "$ASSETS_DIR/strategy_stub_template.md" docs/STRATEGY.md
|
|
88
|
-
|
|
89
|
-
# ─── 10. Create CHANGELOG.md ──────────────────────────────────────────────────
|
|
90
|
-
echo "→ Creating CHANGELOG.md from template..."
|
|
91
|
-
cp "$PKG_ROOT/templates/CHANGELOG_TEMPLATE.md" CHANGELOG.md
|
|
92
|
-
|
|
93
|
-
# ─── 11. Apply project_files_visibility ──────────────────────────────────────
|
|
94
|
-
# Runs before the commit so the .gitignore entry (ignored) is captured in the
|
|
95
|
-
# initial commit.
|
|
96
|
-
echo "→ Applying project files visibility ($VISIBILITY)..."
|
|
97
|
-
bash "$VISIBILITY_SCRIPT" "$VISIBILITY" "$PWD"
|
|
98
|
-
|
|
99
|
-
# ─── 12. Generate CLAUDE.md / AGENTS.md ──────────────────────────────────────
|
|
100
|
-
# Unconditional — never gated on agentTarget (E41_S04). Applies the J-
|
|
101
|
-
# collision rule and idempotent managed-block updates; see
|
|
102
|
-
# lib/generate-agent-context.js (shared with the published `jenga init` CLI).
|
|
103
|
-
echo "→ Generating CLAUDE.md / AGENTS.md..."
|
|
104
|
-
if command -v node >/dev/null 2>&1; then
|
|
105
|
-
node "$PKG_ROOT/lib/generate-agent-context.js" "$PWD"
|
|
106
|
-
else
|
|
107
|
-
echo " Warning: node not found — skipped CLAUDE.md/AGENTS.md generation." >&2
|
|
108
|
-
fi
|
|
109
|
-
|
|
110
|
-
# ─── 13. Initial commit ──────────────────────────────────────────────────────
|
|
111
|
-
echo "→ Staging and committing scaffolded files..."
|
|
112
|
-
git add -A
|
|
113
|
-
git commit -m "init: scaffold project structure and workflow config"
|
|
114
|
-
|
|
115
|
-
echo ""
|
|
116
|
-
echo "✓ Project scaffold complete."
|
package/skills/jbp/SKILL.md
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: j:jbp
|
|
3
|
-
description: Scaffold the project using the JengaBasePlate boilerplate repo template from https://github.com/samwelmunga/JengaBasePlate.git
|
|
4
|
-
keywords:
|
|
5
|
-
- jbp
|
|
6
|
-
- boilerplate
|
|
7
|
-
- scaffold
|
|
8
|
-
- template
|
|
9
|
-
- jenga base
|
|
10
|
-
examples:
|
|
11
|
-
- "scaffold with JengaBasePlate"
|
|
12
|
-
- "set up the base template"
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# JBP — JengaBasePlate Scaffold
|
|
16
|
-
|
|
17
|
-
## Instructions
|
|
18
|
-
|
|
19
|
-
Use the following repo as the boilerplate framework for this project:
|
|
20
|
-
|
|
21
|
-
```
|
|
22
|
-
https://github.com/samwelmunga/JengaBasePlate.git
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
Clone or pull the template and apply its structure to the current project.
|
package/skills/lgtm/SKILL.md
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: j:lgtm
|
|
3
|
-
description: Approve and commit the current work, then continue to the next task. Shortcut that chains /commit followed by /continue.
|
|
4
|
-
keywords:
|
|
5
|
-
- lgtm
|
|
6
|
-
- approve
|
|
7
|
-
- looks good
|
|
8
|
-
- done
|
|
9
|
-
- commit and continue
|
|
10
|
-
examples:
|
|
11
|
-
- "lgtm, commit this"
|
|
12
|
-
- "looks good, move on"
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# LGTM — Approve, Commit, and Continue
|
|
16
|
-
|
|
17
|
-
## Instructions
|
|
18
|
-
|
|
19
|
-
1. Invoke the `/commit` skill and wait for it to finish.
|
|
20
|
-
|
|
21
|
-
2. If the current workflow is part of a `/do` execution, return to that workflow. Otherwise, invoke the `/continue` skill.
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
project/board/epics
|
|
2
|
-
project/board/stories
|
|
3
|
-
project/board/tasks
|
|
4
|
-
project/instructions
|
|
5
|
-
project/configs
|
|
6
|
-
project/data
|
|
7
|
-
project/queue
|
|
8
|
-
project/rapports/problems
|
|
9
|
-
project/rapports/analysis
|
|
10
|
-
project/logs
|
|
11
|
-
project/documentation
|
|
12
|
-
project/documentation/plans
|
|
13
|
-
project/documentation/summaries
|
|
14
|
-
project/documentation/examples
|
package/skills/wtf/SKILL.md
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: j:wtf
|
|
3
|
-
description: Alias of /clearify — clarifies ambiguous, dense, or under-specified prompts and conversation on request. This folder exists only so the `/wtf` slash command resolves to a skill; behaviour is identical to `/clearify`.
|
|
4
|
-
keywords:
|
|
5
|
-
- wtf
|
|
6
|
-
- confused
|
|
7
|
-
- huh
|
|
8
|
-
- what does this mean
|
|
9
|
-
- I'm lost
|
|
10
|
-
examples:
|
|
11
|
-
- "wtf"
|
|
12
|
-
- "wtf does this mean"
|
|
13
|
-
- "wtf is going on here"
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
# WTF — Alias of /clearify
|
|
17
|
-
|
|
18
|
-
## Instructions
|
|
19
|
-
|
|
20
|
-
`/wtf` is an alias of `/clearify`. Follow `skills/clearify/SKILL.md` in full — do not duplicate or reimplement its ambiguity-detection logic here. Read that file's `## Instructions` section and execute it exactly as written, using whatever prompt or conversation context is attached to this `/wtf` invocation.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|