llm-wb 0.1.0-beta.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 (170) hide show
  1. package/.agentic/00.chat/README.md +78 -0
  2. package/.agentic/00.chat/checklists/before-commit.md +195 -0
  3. package/.agentic/00.chat/checklists/llm-workbench-public-beta.md +94 -0
  4. package/.agentic/00.chat/commands/README.md +108 -0
  5. package/.agentic/00.chat/migration-plan.md +132 -0
  6. package/.agentic/00.chat/skills/session-summary.md +48 -0
  7. package/.agentic/00.chat/standards/llm-workbench-public-beta-contract.md +216 -0
  8. package/.agentic/00.chat/standards/main-refresh-conflict-types.md +358 -0
  9. package/.agentic/00.chat/workflows/README.md +40 -0
  10. package/.agentic/00.chat/workflows/bootstrap-chat-workbench-repo.md +212 -0
  11. package/.agentic/00.chat/workflows/chat-cleanup.md +102 -0
  12. package/.agentic/00.chat/workflows/chat-commit.md +56 -0
  13. package/.agentic/00.chat/workflows/chat-promote-to-main.md +169 -0
  14. package/.agentic/00.chat/workflows/chat-refresh-from-main.md +242 -0
  15. package/.agentic/00.chat/workflows/chat-reporting.md +69 -0
  16. package/.agentic/00.chat/workflows/chat-start.md +173 -0
  17. package/.agentic/00.chat/workflows/chat-upstream-reusable-lesson.md +123 -0
  18. package/.agentic/shared/standards/README.md +32 -0
  19. package/.agentic/shared/standards/upstream-repo-bootstrap.md +131 -0
  20. package/.agentic/shared/workflows/README.md +35 -0
  21. package/.agentic/shared/workflows/capability-resolution-workflow.md +189 -0
  22. package/.agentic/shared/workflows/change-shared-process.md +92 -0
  23. package/.cursor/rules/llm-workbench.mdc +17 -0
  24. package/.github/copilot-instructions.md +16 -0
  25. package/AGENTS.md +63 -0
  26. package/CLAUDE.md +16 -0
  27. package/CONTRIBUTING.md +57 -0
  28. package/LICENSE +21 -0
  29. package/LLM_WORKBENCH.md +17 -0
  30. package/README.md +98 -0
  31. package/SECURITY.md +44 -0
  32. package/bin/llm-workbench.js +672 -0
  33. package/docs/00.chat/README.md +47 -0
  34. package/docs/00.chat/llm-workbench-acceptance-matrix.md +55 -0
  35. package/docs/00.chat/script-layout.md +107 -0
  36. package/docs/adapting-to-your-repo.md +29 -0
  37. package/docs/concepts.md +38 -0
  38. package/docs/install.md +114 -0
  39. package/docs/public-beta-contract.md +45 -0
  40. package/docs/workflows.md +103 -0
  41. package/examples/minimal-repo/README.md +13 -0
  42. package/package.json +93 -0
  43. package/scripts/00.chat/README.md +46 -0
  44. package/scripts/00.chat/bootstrap/README.md +35 -0
  45. package/scripts/00.chat/bootstrap/audit-chat-bootstrap-file-set/README.md +39 -0
  46. package/scripts/00.chat/bootstrap/audit-chat-bootstrap-file-set/script.sh +213 -0
  47. package/scripts/00.chat/closeout/README.md +30 -0
  48. package/scripts/00.chat/closeout/build-closeout-prompt/README.md +35 -0
  49. package/scripts/00.chat/closeout/build-closeout-prompt/script.sh +124 -0
  50. package/scripts/00.chat/command/README.md +31 -0
  51. package/scripts/00.chat/command/close/README.md +30 -0
  52. package/scripts/00.chat/command/close/script.sh +25 -0
  53. package/scripts/00.chat/command/dispatcher/README.md +46 -0
  54. package/scripts/00.chat/command/dispatcher/script.sh +91 -0
  55. package/scripts/00.chat/command/dispatcher/smoke-test.sh +168 -0
  56. package/scripts/00.chat/command/new/README.md +32 -0
  57. package/scripts/00.chat/command/new/script.sh +28 -0
  58. package/scripts/00.chat/command/open-window/README.md +38 -0
  59. package/scripts/00.chat/command/open-window/script.sh +25 -0
  60. package/scripts/00.chat/command/package-scripts/README.md +34 -0
  61. package/scripts/00.chat/command/package-scripts/smoke-test.sh +113 -0
  62. package/scripts/00.chat/git/README.md +30 -0
  63. package/scripts/00.chat/git/cleanup-empty-chat-branches/README.md +36 -0
  64. package/scripts/00.chat/git/cleanup-empty-chat-branches/script.sh +243 -0
  65. package/scripts/00.chat/git/cleanup-empty-chat-branches/smoke-test.sh +136 -0
  66. package/scripts/00.chat/local-merge/README.md +30 -0
  67. package/scripts/00.chat/local-merge/list-active-chat-branches/README.md +29 -0
  68. package/scripts/00.chat/local-merge/list-active-chat-branches/script.sh +109 -0
  69. package/scripts/00.chat/local-merge/report-chat-branch-overlaps/README.md +29 -0
  70. package/scripts/00.chat/local-merge/report-chat-branch-overlaps/script.sh +142 -0
  71. package/scripts/00.chat/local-merge/verify-chat-ready-to-merge-local-main/README.md +33 -0
  72. package/scripts/00.chat/local-merge/verify-chat-ready-to-merge-local-main/script.sh +345 -0
  73. package/scripts/00.chat/local-merge/verify-chat-ready-to-merge-local-main/smoke-test.sh +244 -0
  74. package/scripts/00.chat/main-refresh/README.md +39 -0
  75. package/scripts/00.chat/main-refresh/apply-rehearsed-refresh/README.md +32 -0
  76. package/scripts/00.chat/main-refresh/apply-rehearsed-refresh/script.sh +198 -0
  77. package/scripts/00.chat/main-refresh/check-chat-is-current-with-main/README.md +30 -0
  78. package/scripts/00.chat/main-refresh/check-chat-is-current-with-main/script.sh +121 -0
  79. package/scripts/00.chat/main-refresh/classify-conflict/README.md +39 -0
  80. package/scripts/00.chat/main-refresh/classify-conflict/script.sh +169 -0
  81. package/scripts/00.chat/main-refresh/classify-conflict/smoke-test.sh +137 -0
  82. package/scripts/00.chat/main-refresh/classify-refresh-readiness/README.md +35 -0
  83. package/scripts/00.chat/main-refresh/classify-refresh-readiness/script.sh +171 -0
  84. package/scripts/00.chat/main-refresh/classify-refresh-readiness/smoke-test.sh +132 -0
  85. package/scripts/00.chat/main-refresh/rehearse-refresh-from-main/README.md +34 -0
  86. package/scripts/00.chat/main-refresh/rehearse-refresh-from-main/script.sh +124 -0
  87. package/scripts/00.chat/main-refresh/rehearse-refresh-from-main/smoke-test.sh +257 -0
  88. package/scripts/00.chat/main-refresh/show-main-update-status/README.md +31 -0
  89. package/scripts/00.chat/main-refresh/show-main-update-status/script.sh +73 -0
  90. package/scripts/00.chat/main-refresh/verify-conflict-audit/README.md +37 -0
  91. package/scripts/00.chat/main-refresh/verify-conflict-audit/script.sh +154 -0
  92. package/scripts/00.chat/main-refresh/verify-conflict-audit/smoke-test.sh +99 -0
  93. package/scripts/00.chat/metrics/README.md +35 -0
  94. package/scripts/00.chat/metrics/data/chat-pricing.json +107 -0
  95. package/scripts/00.chat/metrics/data/chat-pricing.schema.json +63 -0
  96. package/scripts/00.chat/metrics/estimate-chat-cost/README.md +40 -0
  97. package/scripts/00.chat/metrics/estimate-chat-cost/script.js +130 -0
  98. package/scripts/00.chat/migration/README.md +30 -0
  99. package/scripts/00.chat/migration/audit-chat-layer-migration/README.md +33 -0
  100. package/scripts/00.chat/migration/audit-chat-layer-migration/script.sh +127 -0
  101. package/scripts/00.chat/recovery/README.md +30 -0
  102. package/scripts/00.chat/recovery/import-active-paths-to-chat-worktree/README.md +76 -0
  103. package/scripts/00.chat/recovery/import-active-paths-to-chat-worktree/script.sh +212 -0
  104. package/scripts/00.chat/recovery/import-active-paths-to-chat-worktree/smoke-test.sh +162 -0
  105. package/scripts/00.chat/reporting/README.md +30 -0
  106. package/scripts/00.chat/reporting/generate-commit-log-summary/README.md +35 -0
  107. package/scripts/00.chat/reporting/generate-commit-log-summary/script.sh +299 -0
  108. package/scripts/00.chat/reporting/generate-commit-log-summary/smoke-test.sh +93 -0
  109. package/scripts/00.chat/reporting/report-chat-workspaces/README.md +32 -0
  110. package/scripts/00.chat/reporting/report-chat-workspaces/script.sh +82 -0
  111. package/scripts/00.chat/session-log/README.md +33 -0
  112. package/scripts/00.chat/session-log/check-commit-prerequisites/README.md +89 -0
  113. package/scripts/00.chat/session-log/check-commit-prerequisites/script.sh +121 -0
  114. package/scripts/00.chat/session-log/check-commit-prerequisites/smoke-test.sh +119 -0
  115. package/scripts/00.chat/session-log/check-commitlog-deletions/README.md +90 -0
  116. package/scripts/00.chat/session-log/check-commitlog-deletions/script.sh +131 -0
  117. package/scripts/00.chat/session-log/check-commitlog-deletions/smoke-test.sh +123 -0
  118. package/scripts/00.chat/session-log/checkpoint-chat-session-log/README.md +98 -0
  119. package/scripts/00.chat/session-log/checkpoint-chat-session-log/script.sh +126 -0
  120. package/scripts/00.chat/session-log/paths/README.md +38 -0
  121. package/scripts/00.chat/session-log/paths/lib.sh +133 -0
  122. package/scripts/00.chat/session-log/prepare-chat-session-before-commit/README.md +90 -0
  123. package/scripts/00.chat/session-log/prepare-chat-session-before-commit/script.sh +145 -0
  124. package/scripts/00.chat/session-log/read-current-chat-log/README.md +44 -0
  125. package/scripts/00.chat/session-log/read-current-chat-log/script.sh +92 -0
  126. package/scripts/00.chat/session-log/read-current-chat-log/smoke-test.sh +127 -0
  127. package/scripts/00.chat/session-log/record-chat-commit/README.md +133 -0
  128. package/scripts/00.chat/session-log/record-chat-commit/script.sh +394 -0
  129. package/scripts/00.chat/session-log/record-chat-commit/smoke-test.sh +227 -0
  130. package/scripts/00.chat/session-log/record-main-refresh-conflict/README.md +34 -0
  131. package/scripts/00.chat/session-log/record-main-refresh-conflict/script.sh +239 -0
  132. package/scripts/00.chat/session-log/rename-current-chat-log-folder/README.md +32 -0
  133. package/scripts/00.chat/session-log/rename-current-chat-log-folder/script.sh +112 -0
  134. package/scripts/00.chat/session-log/update-chat-log/README.md +32 -0
  135. package/scripts/00.chat/session-log/update-chat-log/script.sh +294 -0
  136. package/scripts/00.chat/startup/README.md +37 -0
  137. package/scripts/00.chat/startup/auto-start-missing-session/README.md +113 -0
  138. package/scripts/00.chat/startup/auto-start-missing-session/script.sh +54 -0
  139. package/scripts/00.chat/startup/resolve-current-chat-session/README.md +57 -0
  140. package/scripts/00.chat/startup/resolve-current-chat-session/script.sh +47 -0
  141. package/scripts/00.chat/startup/resolve-current-chat-session/smoke-test.sh +130 -0
  142. package/scripts/00.chat/startup/start-chat-session/README.md +197 -0
  143. package/scripts/00.chat/startup/start-chat-session/script.sh +330 -0
  144. package/scripts/00.chat/startup/start-chat-session/smoke-test.sh +182 -0
  145. package/scripts/00.chat/startup/start-new-chat/README.md +31 -0
  146. package/scripts/00.chat/startup/start-new-chat/script.sh +29 -0
  147. package/scripts/00.chat/transcript/README.md +36 -0
  148. package/scripts/00.chat/transcript/discover-codex-session-log/README.md +32 -0
  149. package/scripts/00.chat/transcript/discover-codex-session-log/script.sh +106 -0
  150. package/scripts/00.chat/transcript/register-codex-session-log/README.md +32 -0
  151. package/scripts/00.chat/transcript/register-codex-session-log/script.sh +115 -0
  152. package/scripts/00.chat/worktree/README.md +32 -0
  153. package/scripts/00.chat/worktree/check-write-location/README.md +87 -0
  154. package/scripts/00.chat/worktree/check-write-location/script.sh +95 -0
  155. package/scripts/00.chat/worktree/dirty-worktree-check/README.md +77 -0
  156. package/scripts/00.chat/worktree/dirty-worktree-check/script.sh +93 -0
  157. package/scripts/00.chat/worktree/ensure-chat-worktree/README.md +33 -0
  158. package/scripts/00.chat/worktree/ensure-chat-worktree/script.sh +132 -0
  159. package/scripts/00.chat/worktree/open-window/README.md +34 -0
  160. package/scripts/00.chat/worktree/open-window/script.sh +131 -0
  161. package/scripts/00.chat/worktree/paths/README.md +32 -0
  162. package/scripts/00.chat/worktree/paths/lib.sh +71 -0
  163. package/scripts/01.harness/artifact-metadata/check-headers/script.sh +522 -0
  164. package/scripts/01.harness/artifact-metadata/check-headers/smoke-test.sh +48 -0
  165. package/scripts/01.harness/check-deterministic-process-drift.sh +416 -0
  166. package/scripts/01.harness/check-governed-script-command-drift.sh +184 -0
  167. package/scripts/01.harness/run-governed-script.sh +178 -0
  168. package/scripts/install.sh +503 -0
  169. package/scripts/uninstall.sh +199 -0
  170. package/tests/smoke-test-install.sh +70 -0
@@ -0,0 +1,199 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ # agentic-artifact:
5
+ # schema: agentic-artifact/v2
6
+ # id: chat.script.uninstall
7
+ # version: 1
8
+ # status: active
9
+ # layer: 00.chat
10
+ # domain: install
11
+ # disciplines:
12
+ # - agentic
13
+ # kind: script
14
+ # purpose: Uninstall manifest-owned llm-workbench files from a target Git repository.
15
+ # portability:
16
+ # class: required
17
+ # targets:
18
+ # - llm-workbench
19
+ # used_by:
20
+ # - id: llm-workbench.docs.install
21
+ # effects:
22
+ # - writes-files
23
+
24
+ usage() {
25
+ cat <<'EOF'
26
+ Usage:
27
+ scripts/uninstall.sh [--dry-run|--apply] <target-git-repo>
28
+
29
+ Removes llm-workbench-managed files, package scripts, and instruction blocks
30
+ recorded in .llm-workbench/install-manifest.tsv.
31
+ EOF
32
+ }
33
+
34
+ MODE=""
35
+ TARGET_REPO=""
36
+
37
+ while [ $# -gt 0 ]; do
38
+ case "$1" in
39
+ --dry-run)
40
+ [ -z "$MODE" ] || { echo "ERROR: choose one mode." >&2; exit 2; }
41
+ MODE="dry-run"
42
+ shift
43
+ ;;
44
+ --apply)
45
+ [ -z "$MODE" ] || { echo "ERROR: choose one mode." >&2; exit 2; }
46
+ MODE="apply"
47
+ shift
48
+ ;;
49
+ -h|--help)
50
+ usage
51
+ exit 0
52
+ ;;
53
+ -*)
54
+ echo "ERROR: unknown argument: $1" >&2
55
+ usage >&2
56
+ exit 2
57
+ ;;
58
+ *)
59
+ [ -z "$TARGET_REPO" ] || { echo "ERROR: target repo specified twice." >&2; exit 2; }
60
+ TARGET_REPO="$1"
61
+ shift
62
+ ;;
63
+ esac
64
+ done
65
+
66
+ MODE="${MODE:-dry-run}"
67
+
68
+ if [ -z "$TARGET_REPO" ]; then
69
+ usage >&2
70
+ exit 2
71
+ fi
72
+
73
+ if [ ! -d "$TARGET_REPO/.git" ]; then
74
+ echo "ERROR: target is not a Git repo: $TARGET_REPO" >&2
75
+ exit 1
76
+ fi
77
+
78
+ SOURCE_REPO="$(cd "$(dirname "$0")/.." && pwd)"
79
+ MANIFEST_PATH="$TARGET_REPO/.llm-workbench/install-manifest.tsv"
80
+
81
+ if [ ! -f "$MANIFEST_PATH" ]; then
82
+ echo "ERROR: install manifest not found: ${MANIFEST_PATH#$TARGET_REPO/}" >&2
83
+ exit 1
84
+ fi
85
+
86
+ remove_managed_block() {
87
+ local relative_path="$1"
88
+ local target="$TARGET_REPO/$relative_path"
89
+ local tmp
90
+
91
+ [ -f "$target" ] || return 0
92
+ tmp="$(mktemp)"
93
+
94
+ awk '
95
+ /<!-- llm-workbench:start -->/ {
96
+ in_block = 1
97
+ next
98
+ }
99
+ /<!-- llm-workbench:end -->/ {
100
+ in_block = 0
101
+ next
102
+ }
103
+ in_block == 1 {
104
+ next
105
+ }
106
+ {
107
+ print
108
+ }
109
+ ' "$target" > "$tmp"
110
+
111
+ mv "$tmp" "$target"
112
+ }
113
+
114
+ remove_package_script() {
115
+ local script_name="$1"
116
+ local target_package="$TARGET_REPO/package.json"
117
+ local source_package="$SOURCE_REPO/package.json"
118
+
119
+ [ -f "$target_package" ] || return 0
120
+
121
+ node - "$target_package" "$source_package" "$script_name" <<'NODE'
122
+ const fs = require('fs');
123
+ const targetPath = process.argv[2];
124
+ const sourcePath = process.argv[3];
125
+ const scriptName = process.argv[4];
126
+
127
+ const target = JSON.parse(fs.readFileSync(targetPath, 'utf8'));
128
+ const source = JSON.parse(fs.readFileSync(sourcePath, 'utf8'));
129
+
130
+ if (!target.scripts || !Object.prototype.hasOwnProperty.call(target.scripts, scriptName)) {
131
+ process.exit(0);
132
+ }
133
+
134
+ const expected = source.scripts && source.scripts[scriptName];
135
+ if (expected !== undefined && target.scripts[scriptName] !== expected) {
136
+ process.exit(0);
137
+ }
138
+
139
+ delete target.scripts[scriptName];
140
+ if (Object.keys(target.scripts).length === 0) {
141
+ delete target.scripts;
142
+ }
143
+
144
+ fs.writeFileSync(targetPath, `${JSON.stringify(target, null, 2)}\n`);
145
+ NODE
146
+ }
147
+
148
+ cleanup_empty_dirs() {
149
+ for path in \
150
+ "$TARGET_REPO/scripts" \
151
+ "$TARGET_REPO/.agentic" \
152
+ "$TARGET_REPO/.github" \
153
+ "$TARGET_REPO/.cursor" \
154
+ "$TARGET_REPO/.llm-workbench"; do
155
+ [ -d "$path" ] || continue
156
+ find "$path" -depth -type d -empty -delete
157
+ done
158
+ }
159
+
160
+ echo "llm-workbench uninstall ${MODE}"
161
+ echo
162
+ echo "Target repo: $TARGET_REPO"
163
+ echo "Manifest: ${MANIFEST_PATH#$TARGET_REPO/}"
164
+ echo
165
+
166
+ while IFS=$'\t' read -r kind value; do
167
+ [ -n "${kind:-}" ] || continue
168
+ case "$kind" in
169
+ create)
170
+ echo "REMOVE_CREATED $value"
171
+ if [ "$MODE" = "apply" ]; then
172
+ rm -f "$TARGET_REPO/$value"
173
+ fi
174
+ ;;
175
+ patch-block)
176
+ echo "REMOVE_BLOCK $value"
177
+ if [ "$MODE" = "apply" ]; then
178
+ remove_managed_block "$value"
179
+ fi
180
+ ;;
181
+ package-script)
182
+ echo "REMOVE_PACKAGE_SCRIPT $value"
183
+ if [ "$MODE" = "apply" ]; then
184
+ remove_package_script "$value"
185
+ fi
186
+ ;;
187
+ *)
188
+ echo "ERROR: unknown manifest entry kind: $kind" >&2
189
+ exit 1
190
+ ;;
191
+ esac
192
+ done < "$MANIFEST_PATH"
193
+
194
+ if [ "$MODE" = "apply" ]; then
195
+ rm -f "$MANIFEST_PATH"
196
+ cleanup_empty_dirs
197
+ echo
198
+ echo "Uninstall completed."
199
+ fi
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ WORKBENCH_REPO="$(cd "$(dirname "$0")/.." && pwd)"
5
+ TMP_ROOT="$(mktemp -d "${TMPDIR:-/tmp}/llm-workbench-install.XXXXXX")"
6
+ TARGET_REPO="$TMP_ROOT/target"
7
+
8
+ cleanup() {
9
+ rm -rf "$TMP_ROOT"
10
+ }
11
+ trap cleanup EXIT
12
+
13
+ mkdir -p "$TARGET_REPO"
14
+ git -C "$TARGET_REPO" init -q
15
+ git -C "$TARGET_REPO" config user.name "llm-workbench smoke test"
16
+ git -C "$TARGET_REPO" config user.email "llm-workbench-smoke@example.invalid"
17
+
18
+ bash "$WORKBENCH_REPO/scripts/install.sh" "$TARGET_REPO"
19
+
20
+ test -f "$TARGET_REPO/AGENTS.md"
21
+ test -f "$TARGET_REPO/bin/llm-workbench.js"
22
+ test -d "$TARGET_REPO/.agentic/00.chat"
23
+ test -d "$TARGET_REPO/scripts/00.chat"
24
+ test -d "$TARGET_REPO/scripts/01.harness"
25
+ test ! -e "$TARGET_REPO/docs/00.chat/public-chat-workbench-adrs.md"
26
+ test ! -e "$TARGET_REPO/docs/harness/architecture/adrs"
27
+
28
+ for required_path in \
29
+ scripts/01.harness/run-governed-script.sh \
30
+ scripts/01.harness/check-deterministic-process-drift.sh \
31
+ scripts/01.harness/check-governed-script-command-drift.sh \
32
+ scripts/01.harness/artifact-metadata/check-headers/script.sh \
33
+ scripts/01.harness/artifact-metadata/check-headers/smoke-test.sh; do
34
+ test -f "$TARGET_REPO/$required_path"
35
+ done
36
+
37
+ for source_only_path in \
38
+ scripts/01.harness/artifact-metadata/backfill-v2-headers/script.sh \
39
+ scripts/01.harness/artifact-metadata/generate-index/script.sh \
40
+ scripts/01.harness/check-artifact-metadata-headers.sh \
41
+ scripts/01.harness/check-artifact-path-migration.sh \
42
+ scripts/01.harness/check-rule-test-taxonomy.sh \
43
+ scripts/01.harness/plan-artifact-path-migration.sh \
44
+ scripts/01.harness/smoke-test-artifact-path-migration.sh; do
45
+ test ! -e "$TARGET_REPO/$source_only_path"
46
+ done
47
+
48
+ if grep -RIEq '\.agentic/01\.harness|scripts/02\.rag-rulebook|\.agentic/02\.rag-rulebook' \
49
+ "$TARGET_REPO/scripts/01.harness"; then
50
+ echo "ERROR: installed target harness scripts reference source-only harness/rulebook surfaces." >&2
51
+ exit 1
52
+ fi
53
+
54
+ npm --prefix "$TARGET_REPO" run --silent chat:list >/dev/null
55
+ node "$TARGET_REPO/bin/llm-workbench.js" --help >/dev/null
56
+
57
+ git -C "$TARGET_REPO" add -A
58
+ git -C "$TARGET_REPO" commit -q -m "Install llm-workbench harness"
59
+
60
+ (
61
+ cd "$TARGET_REPO"
62
+ AGENTIC_CHAT_WORKTREE_ROOT="$TMP_ROOT/worktrees" \
63
+ CHAT_COPY_PROMPT=skip CHAT_CLEANUP_EMPTY_BRANCHES=skip \
64
+ CHAT_OPEN_WORKTREE_WINDOW=skip \
65
+ npm run --silent chat:new -- "smoke test first chat startup" >/dev/null
66
+ )
67
+
68
+ find "$TMP_ROOT/worktrees" -path '*/commitLogs/*/README.md' -type f | grep -q .
69
+
70
+ echo "Install smoke test passed."