100xprism 2.3.1

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 (207) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +196 -0
  3. package/VERSION +1 -0
  4. package/adapters/antigravity.sh +14 -0
  5. package/adapters/claude-code.sh +160 -0
  6. package/adapters/codex.sh +13 -0
  7. package/adapters/copilot.sh +13 -0
  8. package/adapters/cursor.sh +13 -0
  9. package/adapters/gemini.sh +13 -0
  10. package/adapters/lib/__pycache__/modules.cpython-312.pyc +0 -0
  11. package/adapters/lib/modules.py +592 -0
  12. package/adapters/lib/shared.sh +83 -0
  13. package/adapters/lib/sync_plugins.py +113 -0
  14. package/adapters/windsurf.sh +15 -0
  15. package/bin/100xprism.js +29 -0
  16. package/get.sh +24 -0
  17. package/install-project.sh +82 -0
  18. package/install.sh +281 -0
  19. package/lib/adapters/windows.js +429 -0
  20. package/lib/bootstrap.js +33 -0
  21. package/lib/init.js +19 -0
  22. package/lib/install.js +18 -0
  23. package/lib/migrate.js +52 -0
  24. package/lib/platform.js +22 -0
  25. package/lib/update.js +29 -0
  26. package/modules/_lib/reference.md +77 -0
  27. package/modules/a11y-auditor/SKILL.md +151 -0
  28. package/modules/ab-test-setup/SKILL.md +266 -0
  29. package/modules/ab-test-setup/evals/evals.json +105 -0
  30. package/modules/ab-test-setup/references/sample-size-guide.md +263 -0
  31. package/modules/ab-test-setup/references/test-templates.md +277 -0
  32. package/modules/ad-creative/SKILL.md +362 -0
  33. package/modules/ad-creative/evals/evals.json +90 -0
  34. package/modules/ad-creative/references/generative-tools.md +637 -0
  35. package/modules/ad-creative/references/platform-specs.md +213 -0
  36. package/modules/ai-seo/SKILL.md +398 -0
  37. package/modules/ai-seo/evals/evals.json +90 -0
  38. package/modules/ai-seo/references/content-patterns.md +285 -0
  39. package/modules/ai-seo/references/platform-ranking-factors.md +152 -0
  40. package/modules/analytics-tracking/SKILL.md +309 -0
  41. package/modules/analytics-tracking/evals/evals.json +90 -0
  42. package/modules/analytics-tracking/references/event-library.md +260 -0
  43. package/modules/analytics-tracking/references/ga4-implementation.md +300 -0
  44. package/modules/analytics-tracking/references/gtm-implementation.md +390 -0
  45. package/modules/architect/SKILL.md +282 -0
  46. package/modules/branch/SKILL.md +105 -0
  47. package/modules/churn-prevention/SKILL.md +424 -0
  48. package/modules/churn-prevention/evals/evals.json +93 -0
  49. package/modules/churn-prevention/references/cancel-flow-patterns.md +316 -0
  50. package/modules/churn-prevention/references/dunning-playbook.md +408 -0
  51. package/modules/cloud-security/SKILL.md +240 -0
  52. package/modules/cold-email/SKILL.md +178 -0
  53. package/modules/cold-email/evals/evals.json +94 -0
  54. package/modules/cold-email/references/benchmarks.md +83 -0
  55. package/modules/cold-email/references/follow-up-sequences.md +81 -0
  56. package/modules/cold-email/references/frameworks.md +90 -0
  57. package/modules/cold-email/references/personalization.md +79 -0
  58. package/modules/cold-email/references/subject-lines.md +53 -0
  59. package/modules/commit/SKILL.md +195 -0
  60. package/modules/competitor-alternatives/SKILL.md +256 -0
  61. package/modules/competitor-alternatives/evals/evals.json +93 -0
  62. package/modules/competitor-alternatives/references/content-architecture.md +271 -0
  63. package/modules/competitor-alternatives/references/templates.md +223 -0
  64. package/modules/connect/SKILL.md +894 -0
  65. package/modules/content-strategy/SKILL.md +359 -0
  66. package/modules/content-strategy/evals/evals.json +90 -0
  67. package/modules/context-dump/SKILL.md +67 -0
  68. package/modules/copy-editing/SKILL.md +447 -0
  69. package/modules/copy-editing/evals/evals.json +89 -0
  70. package/modules/copy-editing/references/plain-english-alternatives.md +394 -0
  71. package/modules/copywriting/SKILL.md +271 -0
  72. package/modules/copywriting/evals/evals.json +111 -0
  73. package/modules/copywriting/references/cold-email-benchmarks.md +83 -0
  74. package/modules/copywriting/references/cold-email-follow-ups.md +81 -0
  75. package/modules/copywriting/references/cold-email-frameworks.md +90 -0
  76. package/modules/copywriting/references/cold-email-personalization.md +79 -0
  77. package/modules/copywriting/references/cold-email-subject-lines.md +53 -0
  78. package/modules/copywriting/references/copy-frameworks.md +344 -0
  79. package/modules/copywriting/references/email-copy-guidelines.md +113 -0
  80. package/modules/copywriting/references/email-types.md +515 -0
  81. package/modules/copywriting/references/natural-transitions.md +272 -0
  82. package/modules/copywriting/references/sequence-templates.md +168 -0
  83. package/modules/data-query/SKILL.md +58 -0
  84. package/modules/data-viz/SKILL.md +225 -0
  85. package/modules/db/SKILL.md +205 -0
  86. package/modules/db/db-engines/_router.md +24 -0
  87. package/modules/db/db-engines/athena.md +16 -0
  88. package/modules/db/db-engines/cloud-sql.md +16 -0
  89. package/modules/db/db-engines/databricks.md +14 -0
  90. package/modules/db/db-engines/oracle.md +14 -0
  91. package/modules/db/db-engines/postgres.md +15 -0
  92. package/modules/db/db-engines/presto.md +14 -0
  93. package/modules/db/db-engines/snowflake.md +14 -0
  94. package/modules/docs/SKILL.md +100 -0
  95. package/modules/email-sequence/SKILL.md +309 -0
  96. package/modules/email-sequence/evals/evals.json +93 -0
  97. package/modules/email-sequence/references/copy-guidelines.md +113 -0
  98. package/modules/email-sequence/references/email-types.md +515 -0
  99. package/modules/email-sequence/references/sequence-templates.md +168 -0
  100. package/modules/enterprise-design/SKILL.md +75 -0
  101. package/modules/eval/SKILL.md +105 -0
  102. package/modules/figma-translator/SKILL.md +49 -0
  103. package/modules/fix-bugs/SKILL.md +104 -0
  104. package/modules/form-cro/SKILL.md +429 -0
  105. package/modules/form-cro/evals/evals.json +90 -0
  106. package/modules/free-tool-strategy/SKILL.md +178 -0
  107. package/modules/free-tool-strategy/evals/evals.json +90 -0
  108. package/modules/free-tool-strategy/references/tool-types.md +217 -0
  109. package/modules/gate/SKILL.md +232 -0
  110. package/modules/grill-me/SKILL.md +59 -0
  111. package/modules/interaction-engineer/SKILL.md +49 -0
  112. package/modules/issue/SKILL.md +272 -0
  113. package/modules/launch/SKILL.md +345 -0
  114. package/modules/launch-strategy/SKILL.md +353 -0
  115. package/modules/launch-strategy/evals/evals.json +91 -0
  116. package/modules/lint/SKILL.md +126 -0
  117. package/modules/marketing-ideas/SKILL.md +167 -0
  118. package/modules/marketing-ideas/evals/evals.json +90 -0
  119. package/modules/marketing-ideas/references/ideas-by-category.md +366 -0
  120. package/modules/marketing-psychology/SKILL.md +455 -0
  121. package/modules/marketing-psychology/evals/evals.json +88 -0
  122. package/modules/motion-designer/SKILL.md +214 -0
  123. package/modules/onboarding-cro/SKILL.md +220 -0
  124. package/modules/onboarding-cro/evals/evals.json +92 -0
  125. package/modules/onboarding-cro/references/experiments.md +258 -0
  126. package/modules/orchestrate/SKILL.md +77 -0
  127. package/modules/page-cro/SKILL.md +182 -0
  128. package/modules/page-cro/evals/evals.json +111 -0
  129. package/modules/page-cro/references/experiments.md +248 -0
  130. package/modules/page-cro/references/paywall-experiments.md +164 -0
  131. package/modules/paid-ads/SKILL.md +315 -0
  132. package/modules/paid-ads/evals/evals.json +90 -0
  133. package/modules/paid-ads/references/ad-copy-templates.md +207 -0
  134. package/modules/paid-ads/references/audience-targeting.md +243 -0
  135. package/modules/paid-ads/references/platform-setup-checklists.md +277 -0
  136. package/modules/paywall-upgrade-cro/SKILL.md +227 -0
  137. package/modules/paywall-upgrade-cro/evals/evals.json +93 -0
  138. package/modules/paywall-upgrade-cro/references/experiments.md +164 -0
  139. package/modules/popup-cro/SKILL.md +453 -0
  140. package/modules/popup-cro/evals/evals.json +94 -0
  141. package/modules/pr/SKILL.md +203 -0
  142. package/modules/pricing-strategy/SKILL.md +231 -0
  143. package/modules/pricing-strategy/evals/evals.json +90 -0
  144. package/modules/pricing-strategy/references/research-methods.md +152 -0
  145. package/modules/pricing-strategy/references/tier-structure.md +232 -0
  146. package/modules/product-marketing-context/SKILL.md +241 -0
  147. package/modules/product-marketing-context/evals/evals.json +85 -0
  148. package/modules/programmatic-seo/SKILL.md +238 -0
  149. package/modules/programmatic-seo/evals/evals.json +94 -0
  150. package/modules/programmatic-seo/references/playbooks.md +308 -0
  151. package/modules/push/SKILL.md +202 -0
  152. package/modules/referral-program/SKILL.md +255 -0
  153. package/modules/referral-program/evals/evals.json +89 -0
  154. package/modules/referral-program/references/affiliate-programs.md +164 -0
  155. package/modules/referral-program/references/program-examples.md +143 -0
  156. package/modules/release/SKILL.md +293 -0
  157. package/modules/revops/SKILL.md +343 -0
  158. package/modules/revops/evals/evals.json +91 -0
  159. package/modules/revops/references/automation-playbooks.md +290 -0
  160. package/modules/revops/references/lifecycle-definitions.md +278 -0
  161. package/modules/revops/references/routing-rules.md +203 -0
  162. package/modules/revops/references/scoring-models.md +247 -0
  163. package/modules/sales-enablement/SKILL.md +349 -0
  164. package/modules/sales-enablement/evals/evals.json +91 -0
  165. package/modules/sales-enablement/references/deck-frameworks.md +263 -0
  166. package/modules/sales-enablement/references/demo-scripts.md +355 -0
  167. package/modules/sales-enablement/references/objection-library.md +270 -0
  168. package/modules/sales-enablement/references/one-pager-templates.md +208 -0
  169. package/modules/schema-markup/SKILL.md +179 -0
  170. package/modules/schema-markup/evals/evals.json +87 -0
  171. package/modules/schema-markup/references/schema-examples.md +398 -0
  172. package/modules/security/SKILL.md +138 -0
  173. package/modules/seo-audit/SKILL.md +412 -0
  174. package/modules/seo-audit/evals/evals.json +136 -0
  175. package/modules/seo-audit/references/ai-writing-detection.md +200 -0
  176. package/modules/seo-audit/references/content-patterns.md +285 -0
  177. package/modules/seo-audit/references/platform-ranking-factors.md +152 -0
  178. package/modules/signup-flow-cro/SKILL.md +359 -0
  179. package/modules/signup-flow-cro/evals/evals.json +88 -0
  180. package/modules/site-architecture/SKILL.md +357 -0
  181. package/modules/site-architecture/evals/evals.json +88 -0
  182. package/modules/site-architecture/references/mermaid-templates.md +216 -0
  183. package/modules/site-architecture/references/navigation-patterns.md +305 -0
  184. package/modules/site-architecture/references/site-type-templates.md +293 -0
  185. package/modules/social-content/SKILL.md +278 -0
  186. package/modules/social-content/evals/evals.json +92 -0
  187. package/modules/social-content/references/platforms.md +170 -0
  188. package/modules/social-content/references/post-templates.md +177 -0
  189. package/modules/social-content/references/reverse-engineering.md +195 -0
  190. package/modules/spec/SKILL.md +81 -0
  191. package/modules/subagents/SKILL.md +123 -0
  192. package/modules/techdebt/SKILL.md +71 -0
  193. package/modules/terminal-setup/SKILL.md +49 -0
  194. package/modules/test/SKILL.md +493 -0
  195. package/modules/test/references/e2e-patterns.md +294 -0
  196. package/modules/update-claude-md/SKILL.md +52 -0
  197. package/modules/visual-system-architect/SKILL.md +53 -0
  198. package/package.json +44 -0
  199. package/plugins/plugins.json +43 -0
  200. package/shell/aliases.sh +24 -0
  201. package/shell/check-update.sh +212 -0
  202. package/templates/.env.example +199 -0
  203. package/templates/docker-compose.md +46 -0
  204. package/templates/node-frontend.md +56 -0
  205. package/templates/node-fullstack.md +59 -0
  206. package/templates/python-api.md +57 -0
  207. package/update.sh +231 -0
package/update.sh ADDED
@@ -0,0 +1,231 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ CLAUDE_DIR="$HOME/.claude"
6
+ COMMANDS_DIR="$CLAUDE_DIR/commands"
7
+ SKILLS_DIR="$CLAUDE_DIR/skills"
8
+ SETTINGS_FILE="$CLAUDE_DIR/settings.json"
9
+ CHECK_ONLY=false
10
+ PLUGINS_ONLY=false
11
+ # Overridable so tests can stub the CLI (see test/update-plugins.test.js).
12
+ CLAUDE_BIN="${CLAUDE_BIN:-claude}"
13
+
14
+ # Colors
15
+ GREEN='\033[0;32m'
16
+ YELLOW='\033[1;33m'
17
+ CYAN='\033[0;36m'
18
+ NC='\033[0m'
19
+
20
+ for _arg in "$@"; do
21
+ [ "$_arg" = "--check-only" ] && CHECK_ONLY=true
22
+ [ "$_arg" = "--plugins-only" ] && PLUGINS_ONLY=true
23
+ done
24
+
25
+ # ── Plugin update function (always available) ─────────────────────────────────
26
+ # Reads the plugin list from plugins/plugins.json (single source of truth). Each
27
+ # entry is the fully-qualified `name@marketplace` id — the only form
28
+ # `claude plugin update` accepts (bare names fail with "not found").
29
+ run_plugin_updates() {
30
+ local _plugins_file="$REPO_DIR/plugins/plugins.json"
31
+ local _plugins=()
32
+ while IFS= read -r _p; do
33
+ [ -n "$_p" ] && _plugins+=("$_p")
34
+ done < <(python3 -c "import json,sys; print('\n'.join(json.load(open(sys.argv[1])).get('plugins',[])))" "$_plugins_file" 2>/dev/null)
35
+
36
+ if [ "${#_plugins[@]}" -eq 0 ]; then
37
+ echo -e " ${YELLOW}→ Plugins: no entries found in plugins.json — skipping${NC}"
38
+ return 0
39
+ fi
40
+
41
+ local _ok=0 _failed=()
42
+ for _p in "${_plugins[@]}"; do
43
+ # A plugin can be installed at user, project, or local scope. `claude plugin
44
+ # update` defaults to user scope and exits non-zero with "not installed at
45
+ # scope <s>" when the plugin lives at a different scope — which previously
46
+ # surfaced as a spurious failure for project/local-scoped plugins. Try each
47
+ # scope until one updates; only mark failed if it's absent from all of them.
48
+ local _updated=false _scope
49
+ for _scope in user project local; do
50
+ if "$CLAUDE_BIN" plugin update "$_p" --scope "$_scope" >/dev/null 2>&1; then
51
+ _updated=true
52
+ break
53
+ fi
54
+ done
55
+ if $_updated; then
56
+ (( _ok++ )) || true
57
+ else
58
+ _failed+=("$_p")
59
+ fi
60
+ done
61
+
62
+ if [ "${#_failed[@]}" -eq 0 ]; then
63
+ echo -e " ${GREEN}→ Plugins: $_ok updated ✓${NC}"
64
+ else
65
+ echo -e " ${GREEN}→ Plugins: $_ok updated${NC}, ${YELLOW}${#_failed[@]} failed:${NC}"
66
+ for _p in "${_failed[@]}"; do
67
+ echo -e " ${YELLOW}• $_p${NC}"
68
+ done
69
+ fi
70
+ }
71
+
72
+ # ── Hook sync (only refreshes hooks already installed; never enables new ones) ─
73
+ # Keeps the wired-in hook commands current after a pull without re-prompting or
74
+ # silently opting users into hooks they declined at install time.
75
+ sync_hooks() {
76
+ [ -f "$SETTINGS_FILE" ] || return 0
77
+ python3 "$REPO_DIR/adapters/lib/modules.py" emit-hooks --sync 2>/dev/null || true
78
+ }
79
+
80
+ # Test seam: when sourced with UPDATE_SH_SOURCE_ONLY=1, load the functions above
81
+ # without running the update flow, so tests can exercise them against a stubbed
82
+ # CLAUDE_BIN. No effect when the script is executed normally.
83
+ if [ -n "${UPDATE_SH_SOURCE_ONLY:-}" ]; then
84
+ return 0 2>/dev/null || exit 0
85
+ fi
86
+
87
+ if [ "$PLUGINS_ONLY" = true ]; then
88
+ echo ""
89
+ echo "Updating Claude plugins..."
90
+ run_plugin_updates
91
+ echo ""
92
+ echo -e "${GREEN}✓ Done. Restart Claude Code to activate changes.${NC}"
93
+ echo ""
94
+ exit 0
95
+ fi
96
+
97
+ echo ""
98
+ echo "Checking for updates..."
99
+
100
+ cd "$REPO_DIR"
101
+
102
+ git fetch origin main --quiet 2>/dev/null
103
+
104
+ LOCAL=$(git rev-parse HEAD)
105
+ REMOTE=$(git rev-parse origin/main)
106
+
107
+ if [ "$LOCAL" = "$REMOTE" ]; then
108
+ echo -e "${GREEN}✓ Repo already up to date.${NC}"
109
+ echo ""
110
+ echo "Syncing plugins and settings..."
111
+ python3 "$REPO_DIR/adapters/lib/sync_plugins.py" \
112
+ --settings "$SETTINGS_FILE" --plugins "$REPO_DIR/plugins/plugins.json"
113
+ sync_hooks
114
+ run_plugin_updates
115
+ echo ""
116
+ echo -e "${CYAN}Tip: Restart Claude Code to activate any plugin changes.${NC}"
117
+ echo ""
118
+ exit 0
119
+ fi
120
+
121
+ CHANGES=$(git log --oneline "$LOCAL..$REMOTE" 2>/dev/null)
122
+ LOCAL_SHORT=$(git rev-parse --short HEAD)
123
+ REMOTE_SHORT=$(git rev-parse --short origin/main)
124
+
125
+ echo ""
126
+ echo " Current version: $LOCAL_SHORT ($(git log -1 --format='%ar' HEAD))"
127
+ echo " Latest version: $REMOTE_SHORT ($(git log -1 --format='%ar' origin/main))"
128
+ echo ""
129
+ echo "Changes:"
130
+ while IFS= read -r line; do echo " • $line"; done <<< "$CHANGES"
131
+ echo ""
132
+
133
+ if [ "$CHECK_ONLY" = true ]; then
134
+ echo -e "${CYAN}Run '~/100xprism/update.sh' to apply updates.${NC}"
135
+ echo ""
136
+ exit 0
137
+ fi
138
+
139
+ read -rp "Apply updates? (Y/n): " confirm
140
+ confirm=${confirm:-Y}
141
+
142
+ if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
143
+ echo "Skipped."
144
+ exit 0
145
+ fi
146
+
147
+ echo ""
148
+
149
+ git pull origin main --quiet
150
+ echo -e " ${GREEN}→ Pulled latest ✓${NC}"
151
+
152
+ # Optional: verify GPG signature on HEAD when HUNDRED_X_VERIFY_SIGNATURES=1.
153
+ # Requires the maintainer's public key to be imported in the user's GPG keyring.
154
+ if [ "${HUNDRED_X_VERIFY_SIGNATURES:-0}" = "1" ]; then
155
+ if git verify-commit HEAD >/dev/null 2>&1; then
156
+ echo -e " ${GREEN}→ HEAD signature verified ✓${NC}"
157
+ else
158
+ echo -e " ${YELLOW}⚠ HEAD commit is not signed or signature is invalid.${NC}"
159
+ echo -e " ${YELLOW} Set HUNDRED_X_VERIFY_SIGNATURES=0 to skip this check.${NC}"
160
+ fi
161
+ fi
162
+
163
+ if [ -d "$COMMANDS_DIR" ] && [ "$(ls -A "$COMMANDS_DIR" 2>/dev/null)" ]; then
164
+ BACKUP="$CLAUDE_DIR/commands.bak.$(date +%Y%m%d_%H%M%S)"
165
+ cp -r "$COMMANDS_DIR" "$BACKUP"
166
+ echo -e " ${YELLOW}→ Backed up commands to $(basename "$BACKUP")${NC}"
167
+ fi
168
+
169
+ # Sync modules (skills + slash command aliases) via the claude-code adapter
170
+ python3 "$REPO_DIR/adapters/lib/modules.py" emit-claude-code
171
+ echo -e " ${GREEN}→ Updated modules ✓${NC}"
172
+
173
+ python3 "$REPO_DIR/adapters/lib/sync_plugins.py" \
174
+ --settings "$SETTINGS_FILE" --plugins "$REPO_DIR/plugins/plugins.json" \
175
+ --session-hook "$HOME/100xprism/shell/check-update.sh --claude-hook"
176
+
177
+ echo -e " ${CYAN}→ Shell aliases auto-updated (sourced file)${NC}"
178
+
179
+ # Refresh any installed hooks so their wired commands stay current.
180
+ sync_hooks
181
+
182
+ # ── Update Claude plugins ─────────────────────────────────────────────────────
183
+ run_plugin_updates
184
+
185
+ # ── Regenerate tracked project instruction files ────────────────────────────
186
+
187
+ regenerate_tracked_projects() {
188
+ local tracked="$HOME/.100xprism/tracked-projects"
189
+ [[ -f "$tracked" ]] || return 0
190
+
191
+ local count=0
192
+ while IFS= read -r project_path; do
193
+ [[ -z "$project_path" ]] && continue
194
+ [[ -d "$project_path" ]] || continue # skip deleted projects
195
+
196
+ local regenerated=false
197
+
198
+ [[ -f "$project_path/.cursorrules" ]] && bash "$REPO_DIR/adapters/cursor.sh" "$project_path" && regenerated=true
199
+ [[ -f "$project_path/AGENTS.md" ]] && bash "$REPO_DIR/adapters/codex.sh" "$project_path" && regenerated=true
200
+ [[ -f "$project_path/.windsurfrules" ]] && bash "$REPO_DIR/adapters/windsurf.sh" "$project_path" && regenerated=true
201
+ [[ -f "$project_path/.github/copilot-instructions.md" ]] && bash "$REPO_DIR/adapters/copilot.sh" "$project_path" && regenerated=true
202
+ [[ -f "$project_path/GEMINI.md" ]] && bash "$REPO_DIR/adapters/gemini.sh" "$project_path" && regenerated=true
203
+ [[ -f "$project_path/ANTIGRAVITY.md" ]] && bash "$REPO_DIR/adapters/antigravity.sh" "$project_path" && regenerated=true
204
+
205
+ "$regenerated" && (( count++ )) || true
206
+ done < "$tracked"
207
+
208
+ if (( count > 0 )); then
209
+ echo -e " ${GREEN}→ Regenerated instruction files in $count tracked project(s) ✓${NC}"
210
+ fi
211
+ }
212
+
213
+ # Clear update-available flag from cache so banner stops showing
214
+ if [[ -f "$HOME/.100xprism/update-cache" ]]; then
215
+ _tmp="$(mktemp)"
216
+ grep -v '^has_update=' "$HOME/.100xprism/update-cache" > "$_tmp" 2>/dev/null || true
217
+ grep -v '^snoozed_until=' "$_tmp" >> /dev/null || true
218
+ mv "$_tmp" "$HOME/.100xprism/update-cache"
219
+ echo "has_update=false" >> "$HOME/.100xprism/update-cache"
220
+ echo "snoozed_until=0" >> "$HOME/.100xprism/update-cache"
221
+ fi
222
+
223
+ regenerate_tracked_projects
224
+
225
+ echo ""
226
+ NEW_VERSION="$(cat "$REPO_DIR/VERSION" 2>/dev/null | tr -d '[:space:]')"
227
+ echo -e "${GREEN}✓ 100x Dev updated to v${NEW_VERSION}! Restart Claude Code to activate new modules and plugins.${NC}"
228
+ echo ""
229
+ echo -e "${CYAN}Tip: Add this to your crontab to get notified weekly:${NC}"
230
+ echo " 0 9 * * 1 $REPO_DIR/update.sh --check-only"
231
+ echo ""