holistic 0.2.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 (66) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/CONTRIBUTING.md +121 -0
  3. package/LICENSE +21 -0
  4. package/README.md +329 -0
  5. package/bin/holistic +17 -0
  6. package/bin/holistic.cmd +23 -0
  7. package/bin/holistic.js +59 -0
  8. package/dist/__tests__/mcp-notification.test.d.ts +5 -0
  9. package/dist/__tests__/mcp-notification.test.d.ts.map +1 -0
  10. package/dist/__tests__/mcp-notification.test.js +255 -0
  11. package/dist/__tests__/mcp-notification.test.js.map +1 -0
  12. package/dist/cli.d.ts +6 -0
  13. package/dist/cli.d.ts.map +1 -0
  14. package/dist/cli.js +637 -0
  15. package/dist/cli.js.map +1 -0
  16. package/dist/core/docs.d.ts +3 -0
  17. package/dist/core/docs.d.ts.map +1 -0
  18. package/dist/core/docs.js +602 -0
  19. package/dist/core/docs.js.map +1 -0
  20. package/dist/core/git-hooks.d.ts +17 -0
  21. package/dist/core/git-hooks.d.ts.map +1 -0
  22. package/dist/core/git-hooks.js +144 -0
  23. package/dist/core/git-hooks.js.map +1 -0
  24. package/dist/core/git.d.ts +12 -0
  25. package/dist/core/git.d.ts.map +1 -0
  26. package/dist/core/git.js +121 -0
  27. package/dist/core/git.js.map +1 -0
  28. package/dist/core/lock.d.ts +2 -0
  29. package/dist/core/lock.d.ts.map +1 -0
  30. package/dist/core/lock.js +40 -0
  31. package/dist/core/lock.js.map +1 -0
  32. package/dist/core/redact.d.ts +3 -0
  33. package/dist/core/redact.d.ts.map +1 -0
  34. package/dist/core/redact.js +13 -0
  35. package/dist/core/redact.js.map +1 -0
  36. package/dist/core/setup.d.ts +35 -0
  37. package/dist/core/setup.d.ts.map +1 -0
  38. package/dist/core/setup.js +654 -0
  39. package/dist/core/setup.js.map +1 -0
  40. package/dist/core/splash.d.ts +9 -0
  41. package/dist/core/splash.d.ts.map +1 -0
  42. package/dist/core/splash.js +35 -0
  43. package/dist/core/splash.js.map +1 -0
  44. package/dist/core/state.d.ts +42 -0
  45. package/dist/core/state.d.ts.map +1 -0
  46. package/dist/core/state.js +744 -0
  47. package/dist/core/state.js.map +1 -0
  48. package/dist/core/sync.d.ts +12 -0
  49. package/dist/core/sync.d.ts.map +1 -0
  50. package/dist/core/sync.js +106 -0
  51. package/dist/core/sync.js.map +1 -0
  52. package/dist/core/types.d.ts +210 -0
  53. package/dist/core/types.d.ts.map +1 -0
  54. package/dist/core/types.js +2 -0
  55. package/dist/core/types.js.map +1 -0
  56. package/dist/daemon.d.ts +7 -0
  57. package/dist/daemon.d.ts.map +1 -0
  58. package/dist/daemon.js +242 -0
  59. package/dist/daemon.js.map +1 -0
  60. package/dist/mcp-server.d.ts +11 -0
  61. package/dist/mcp-server.d.ts.map +1 -0
  62. package/dist/mcp-server.js +266 -0
  63. package/dist/mcp-server.js.map +1 -0
  64. package/docs/handoff-walkthrough.md +119 -0
  65. package/docs/structured-metadata.md +341 -0
  66. package/package.json +67 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,13 @@
1
+ # Changelog
2
+
3
+ ## 0.2.0 - 2026-03-21
4
+
5
+ First public npm-ready release of Holistic.
6
+
7
+ - Added a one-step `holistic bootstrap` flow for repo setup plus optional local machine integration.
8
+ - Added thin MCP server support with `holistic serve`.
9
+ - Added `holistic status` and `holistic diff`.
10
+ - Added portable hook installation plus self-healing Holistic-managed hook refresh.
11
+ - Added hidden-ref portable state sync via `refs/holistic/state` to avoid GitHub branch noise.
12
+ - Added managed `.gitattributes` generation for portable Holistic files.
13
+ - Added packaging and install smoke validation for clean-repo bootstrap.
@@ -0,0 +1,121 @@
1
+ # Contributing to Holistic
2
+
3
+ Holistic is trying to solve a very specific pain: project work gets fragmented across agents, apps, devices, and half-finished sessions. Contributions are most helpful when they make handoffs clearer, memory more durable, or regressions harder to repeat.
4
+
5
+ ## What we care about
6
+
7
+ - preserving project context across agent switches
8
+ - reducing repeated regressions
9
+ - making setup simple enough that people will actually use it
10
+ - keeping the repo-first model portable across tools and devices
11
+ - making long-term project history useful, not noisy
12
+
13
+ ## Local development
14
+
15
+ Requirements:
16
+
17
+ - Node.js 24+
18
+ - Git
19
+
20
+ Install and verify:
21
+
22
+ ```bash
23
+ npm install
24
+ node --version
25
+ npm test
26
+ ```
27
+
28
+ ## Project structure
29
+
30
+ | Path | Purpose |
31
+ | --- | --- |
32
+ | `src/cli.ts` | public CLI entrypoint |
33
+ | `src/daemon.ts` | passive background capture |
34
+ | `src/core/state.ts` | canonical state model and session lifecycle |
35
+ | `src/core/docs.ts` | generated repo-visible memory docs |
36
+ | `src/core/setup.ts` | repo init and system helper generation |
37
+ | `tests/run-tests.ts` | end-to-end regression harness |
38
+ | `.holistic-local/` | ignored local Holistic runtime for this public product repo |
39
+
40
+ ## Dogfooding Holistic in this repo
41
+
42
+ This public product repo is a special case.
43
+
44
+ Holistic dogfooding here must stay local-only and untracked. The repo-level override redirects runtime state into `.holistic-local/`, `HOLISTIC.local.md`, and `AGENTS.local.md` instead of tracked public runtime files.
45
+
46
+ Recommended local setup for working on Holistic itself:
47
+
48
+ ```bash
49
+ node --experimental-strip-types src/cli.ts bootstrap --install-daemon false --configure-mcp false --install-hooks false
50
+ ```
51
+
52
+ Common local flows:
53
+
54
+ ```bash
55
+ node --experimental-strip-types src/cli.ts resume --agent codex
56
+ node --experimental-strip-types src/cli.ts checkpoint --reason "milestone"
57
+ node --experimental-strip-types src/cli.ts handoff
58
+ ```
59
+
60
+ Do not initialize tracked `.holistic/` runtime state in this repo, and do not use a visible `holistic/state` branch here for self-dogfooding.
61
+
62
+ For normal user repos, tracked `.holistic/` runtime plus the hidden portable state ref (`refs/holistic/state`) is the standard path. This product repo itself should stay public, clean, and main-only.
63
+
64
+ ## Contribution guidelines
65
+
66
+ ### 1. Prefer repo-first solutions
67
+
68
+ If a feature only works on one machine or in one app, it is probably not enough on its own. Holistic should degrade gracefully to repo-visible memory.
69
+
70
+ ### 2. Preserve long-term memory
71
+
72
+ New features should help answer:
73
+
74
+ - what changed
75
+ - why it changed
76
+ - what impact it had
77
+ - what should not regress later
78
+
79
+ ### 3. Avoid transcript bloat
80
+
81
+ Holistic should preserve durable, useful state. It should not turn into a raw log dump of every prompt and response.
82
+
83
+ ### 4. Protect user trust
84
+
85
+ - redact secrets
86
+ - do not commit sensitive local state by accident
87
+ - make automated behavior legible and reviewable
88
+
89
+ ### 5. Test behavior, not just helpers
90
+
91
+ When possible, add tests around the user-visible workflow:
92
+
93
+ - resume
94
+ - checkpoint
95
+ - handoff
96
+ - carryover to a new session
97
+ - regression preservation
98
+ - cross-device sync behavior
99
+
100
+ ## Pull request checklist
101
+
102
+ Before opening a PR:
103
+
104
+ - run `npm test`
105
+ - run `npm run build`
106
+ - verify the README and docs still match the behavior
107
+ - think through whether your change improves or harms cross-agent portability
108
+ - call out any new risks around regression memory, secrecy, or sync
109
+
110
+ ## Good areas for contributions
111
+
112
+ - stronger regression tracking
113
+ - better cross-device sync ergonomics
114
+ - richer handoff review flows
115
+ - app-specific integrations that still honor the repo-first contract
116
+ - clearer history summarization
117
+ - safer passive capture
118
+
119
+ ## Design principle
120
+
121
+ Holistic should help the next agent act like they were there the whole time.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Lisa
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,329 @@
1
+ # Holistic
2
+
3
+ ```
4
+ ██╗ ██╗ ██████╗ ██╗ ██╗███████╗████████╗██╗ ██████╗
5
+ ██║ ██║██╔═══██╗██║ ██║██╔════╝╚══██╔══╝██║██╔════╝
6
+ ███████║██║ ██║██║ ██║███████╗ ██║ ██║██║
7
+ ██╔══██║██║ ██║██║ ██║╚════██║ ██║ ██║██║
8
+ ██║ ██║╚██████╔╝███████╗██║███████║ ██║ ██║╚██████╗
9
+ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═════╝
10
+
11
+ Your repo remembers, so your next agent doesn't have to guess.
12
+ Shared memory for AI agents, built into your repo.
13
+ ```
14
+
15
+ ### One command. Every agent. Zero re-explaining.
16
+
17
+ Holistic gives your AI agents shared memory inside the repo itself. When you switch from Claude to Codex to Gemini, the next agent can see what happened last time, what not to break, and what should happen next.
18
+
19
+ ## Public repo hygiene
20
+
21
+ The Holistic product repo is a special case when it dogfoods itself.
22
+
23
+ Normal user repos may commit portable Holistic runtime files and sync them through a dedicated portable git ref. This public repo should not ship a contributor's personal session history, handoff state, or live dogfooding runtime files. Self-dogfooding on this repo is redirected to ignored local files instead.
24
+
25
+ ---
26
+
27
+ ## The problem
28
+
29
+ If you use more than one AI coding assistant, the workflow usually falls apart:
30
+
31
+ - You re-explain the project every session.
32
+ - Bugs come back because the next agent does not know what was already fixed.
33
+ - Progress gets lost when context windows end.
34
+ - Agents undo each other because there is no durable handoff.
35
+ - It is hard to tell what is actually done.
36
+
37
+ Holistic fixes that by making the repo the source of truth.
38
+
39
+ ---
40
+
41
+ ## What it feels like now
42
+
43
+ Run one setup command on a machine:
44
+
45
+ ```bash
46
+ holistic bootstrap
47
+ ```
48
+
49
+ Then daily use is mostly:
50
+
51
+ 1. Open the repo in Codex, Claude, or another supported app.
52
+ 2. Start a fresh session.
53
+ 3. Ask the agent to read `AGENTS.md` and `HOLISTIC.md`.
54
+ 4. Let Holistic carry continuity through checkpoints, handoffs, and repo memory.
55
+
56
+ Most days, you do not need to run `npm start`, keep a terminal process open, or manually re-brief the agent.
57
+
58
+ `holistic bootstrap` is a machine setup command, not just a repo setup command. By default it can install local startup helpers and configure Claude Desktop MCP on that machine.
59
+
60
+ ---
61
+
62
+ ## How it works
63
+
64
+ ```text
65
+ holistic bootstrap
66
+ ->
67
+ You open a repo in your agent app
68
+ ->
69
+ The agent reads HOLISTIC.md and AGENTS.md
70
+ ->
71
+ "Here's where we left off. Here's what's next. Continue as planned, tweak the plan, or start something new?"
72
+ ->
73
+ Work happens
74
+ ->
75
+ Holistic checkpoints and handoffs keep repo memory current
76
+ ->
77
+ The next agent picks up without a long re-explanation
78
+ ```
79
+
80
+ ---
81
+
82
+ ## Quick start
83
+
84
+ ### Install
85
+
86
+ Requires Node.js 24+.
87
+
88
+ ```bash
89
+ npm install -g holistic
90
+ ```
91
+
92
+ Then verify the CLI is available:
93
+
94
+ ```bash
95
+ holistic --help
96
+ ```
97
+
98
+ For contributors or local source installs:
99
+
100
+ ```bash
101
+ git clone https://github.com/lweiss01/holistic.git
102
+ cd holistic
103
+ npm install
104
+ npm run build
105
+ npm pack
106
+ npm install -g ./holistic-*.tgz
107
+ ```
108
+
109
+ For local development without a packaged tarball:
110
+
111
+ ```bash
112
+ npm install
113
+ npm link
114
+ ```
115
+
116
+ ### Set up a repo
117
+
118
+ ```bash
119
+ cd my-project
120
+ holistic bootstrap --remote origin
121
+ git add .gitattributes HOLISTIC.md AGENTS.md CLAUDE.md GEMINI.md HISTORY.md
122
+ git add .holistic/config.json .holistic/state.json
123
+ git add .holistic/context/
124
+ git commit -m "feat: add holistic"
125
+ ```
126
+
127
+ By default, Holistic now syncs portable state through a hidden git ref (`refs/holistic/state`) to avoid GitHub branch noise.
128
+
129
+ Advanced overrides:
130
+
131
+ ```bash
132
+ holistic bootstrap --state-ref refs/holistic/state
133
+ holistic bootstrap --state-branch holistic/state
134
+ ```
135
+
136
+ If you want repo scaffolding without changing local desktop integrations or daemon startup on the current machine, use:
137
+
138
+ ```bash
139
+ holistic bootstrap --install-daemon false --configure-mcp false
140
+ ```
141
+
142
+ **What to commit:**
143
+ - `.gitattributes` - Holistic-managed line-ending rules for portable files
144
+ - `.holistic/config.json` - repo configuration
145
+ - `.holistic/state.json` - current session state
146
+ - `.holistic/context/` - generated docs (history, regression watch, adapters)
147
+ - `.holistic/sessions/` - session history files
148
+
149
+ **What NOT to commit:**
150
+ - `.holistic/system/*.sh` and `.holistic/system/*.ps1` - machine-local scripts with absolute paths (already in `.gitignore`)
151
+
152
+ The portable repo memory is meant to be committed and synced. Machine-local helper scripts are generated for each machine and stay local.
153
+
154
+ After that, open the repo in your agent app and use a startup prompt like:
155
+
156
+ ```text
157
+ Before doing any other work, read AGENTS.md and HOLISTIC.md, recap the current state briefly, and ask me exactly one question: continue as planned, tweak the plan, or start something new.
158
+ ```
159
+
160
+ That is enough for normal repo-first continuity.
161
+
162
+ ---
163
+
164
+ ## Daily workflow
165
+
166
+ One-time machine setup:
167
+
168
+ - Run `holistic bootstrap`.
169
+ - By default it scaffolds repo files, installs hooks, sets up daemon startup, and configures supported integrations such as Claude Desktop MCP on the current machine.
170
+ - If you only want repo files and hooks, use `holistic bootstrap --install-daemon false --configure-mcp false`.
171
+
172
+ Normal use:
173
+
174
+ - Start a session in Codex, Claude, or another supported app.
175
+ - Let the agent read the repo instructions and current handoff state.
176
+ - Work normally.
177
+ - Use explicit CLI commands only when you want to inspect state manually or force a checkpoint or handoff yourself.
178
+
179
+ Useful manual commands:
180
+
181
+ ```bash
182
+ holistic status
183
+ holistic checkpoint --reason "..."
184
+ holistic handoff
185
+ ```
186
+
187
+ ---
188
+
189
+ ## Regression protection
190
+
191
+ When an agent fixes something delicate, lock it in:
192
+
193
+ ```bash
194
+ holistic checkpoint \
195
+ --fixed "login redirect loop" \
196
+ --fix-files "src/auth.ts" \
197
+ --fix-risk "changing redirect logic will re-introduce this"
198
+ ```
199
+
200
+ Future agents will see that warning in the repo docs before they touch the risky area again.
201
+
202
+ ---
203
+
204
+ ## Works with multiple agent apps
205
+
206
+ Holistic is model-agnostic. It works through repo files first, and can also expose a thin MCP server where supported.
207
+
208
+ | App | Reads | Startup experience |
209
+ |---|---|---|
210
+ | Claude Desktop | `CLAUDE.md` and repo docs | automatic plus MCP support |
211
+ | Codex | `AGENTS.md` and repo docs | automatic |
212
+ | Gemini / Antigravity | `GEMINI.md` and repo docs | automatic |
213
+ | Other VS Code forks | `AGENTS.md` and repo docs | usually automatic |
214
+ | Web tools | repo docs pasted manually | manual |
215
+
216
+ ---
217
+
218
+ ## What lives in your repo
219
+
220
+ ```text
221
+ my-project/
222
+ |- HOLISTIC.md
223
+ |- AGENTS.md
224
+ |- CLAUDE.md
225
+ |- GEMINI.md
226
+ |- HISTORY.md
227
+ `- .holistic/
228
+ |- config.json
229
+ |- state.json
230
+ |- sessions/
231
+ `- context/
232
+ |- project-history.md
233
+ |- regression-watch.md
234
+ `- adapters/
235
+ ```
236
+
237
+ The portable repo memory (config, state, context, sessions) is meant to be committed and synced. Machine-local helper scripts under `.holistic/system/` are generated for each machine and stay local (already in `.gitignore`).
238
+
239
+ ---
240
+
241
+ ## Commands
242
+
243
+ | Command | What it does |
244
+ |---|---|
245
+ | `holistic init` | Base repo setup and scaffolding |
246
+ | `holistic bootstrap` | One-step machine setup for repo files, hooks, and by-default local daemon/MCP integration setup |
247
+ | `holistic start --agent <name>` | Opens a session and prints the ASCII banner plus recap |
248
+ | `holistic checkpoint --reason "..."` | Saves progress and context |
249
+ | `holistic handoff` | Ends a session with a handoff |
250
+ | `holistic status` | Shows the current state |
251
+ | `holistic diff --from <id> --to <id>` | Compares two sessions |
252
+ | `holistic serve` | Runs the thin MCP server and prints a startup banner to `stderr` |
253
+ | `holistic watch` | Foreground daemon mode for automatic checkpoints |
254
+
255
+ ### Non-interactive handoff
256
+
257
+ ```bash
258
+ holistic handoff \
259
+ --summary "Implemented OAuth flow and token storage" \
260
+ --next "Wire up the refresh token endpoint" \
261
+ --blocker "Need refresh token endpoint from backend team"
262
+ ```
263
+
264
+ ---
265
+
266
+ ## Architecture
267
+
268
+ Holistic is intentionally repo-first, not machine-first.
269
+
270
+ | Layer | Purpose | Portable? |
271
+ |---|---|---|
272
+ | Repo memory | Shared handoff, history, regression, and session state | Yes |
273
+ | State ref | Cross-device distribution of Holistic state via git | Yes |
274
+ | Local daemon | Passive capture on one machine | No |
275
+
276
+ That split is what makes Holistic work across tools and devices instead of only on one laptop.
277
+
278
+ ### MCP server mode
279
+
280
+ Holistic can run as a thin MCP server for agent-native workflows:
281
+
282
+ ```bash
283
+ holistic serve
284
+ ```
285
+
286
+ In normal use, Claude Desktop can launch this automatically after `holistic bootstrap` configures the MCP entry. You usually only run it manually for debugging.
287
+
288
+ When you do run `holistic serve` manually in a terminal, Holistic prints its ASCII startup banner to `stderr` so you get visible confirmation without corrupting the MCP `stdout` transport.
289
+
290
+ ```json
291
+ {
292
+ "mcpServers": {
293
+ "holistic": {
294
+ "command": "holistic",
295
+ "args": ["serve"],
296
+ "env": {
297
+ "HOLISTIC_REPO": "/path/to/your/project"
298
+ }
299
+ }
300
+ }
301
+ }
302
+ ```
303
+
304
+ ---
305
+
306
+ ## Why this matters
307
+
308
+ If you are already using more than one AI coding assistant, you already have the continuity problem.
309
+
310
+ Holistic gives you:
311
+
312
+ - Less repeated explanation
313
+ - Fewer accidental regressions
314
+ - Clearer handoffs across apps and devices
315
+ - A durable record of what changed and why
316
+ - Agents that can get to work quickly
317
+
318
+ ---
319
+
320
+ ## Quick links
321
+
322
+ - [Walkthrough](./docs/handoff-walkthrough.md)
323
+ - [Changelog](./CHANGELOG.md)
324
+ - [Contributing](./CONTRIBUTING.md)
325
+ - [License](./LICENSE)
326
+
327
+ ---
328
+
329
+ <p align="center"><em>Built for people who use more than one AI assistant and are tired of paying the context tax.</em></p>
package/bin/holistic ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env sh
2
+ SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)"
3
+ node --experimental-strip-types "$SCRIPT_DIR/../src/cli.ts" "$@"
4
+ status=$?
5
+ if [ "$status" -ne 0 ]; then
6
+ exit "$status"
7
+ fi
8
+ if [ "$1" = "handoff" ] && [ -f "$PWD/.holistic/context/pending-commit.txt" ]; then
9
+ message=$(head -n 1 "$PWD/.holistic/context/pending-commit.txt")
10
+ if [ -n "$message" ]; then
11
+ git add -- HOLISTIC.md AGENTS.md .holistic && git commit -m "$message"
12
+ if [ "$?" -eq 0 ] && [ -f "$PWD/.holistic/system/sync-state.sh" ]; then
13
+ /bin/sh "$PWD/.holistic/system/sync-state.sh" || true
14
+ node --experimental-strip-types "$SCRIPT_DIR/../src/cli.ts" internal-mark-commit --message "$message"
15
+ fi
16
+ fi
17
+ fi
@@ -0,0 +1,23 @@
1
+ @echo off
2
+ setlocal
3
+ set SCRIPT_DIR=%~dp0
4
+ node --experimental-strip-types "%SCRIPT_DIR%..\src\cli.ts" %*
5
+ if errorlevel 1 exit /b %errorlevel%
6
+ if /I "%~1"=="handoff" (
7
+ set PENDING_FILE=%CD%\.holistic\context\pending-commit.txt
8
+ if exist "%PENDING_FILE%" (
9
+ set /p COMMIT_MSG=<"%PENDING_FILE%"
10
+ if defined COMMIT_MSG (
11
+ git add -- HOLISTIC.md AGENTS.md .holistic
12
+ if not errorlevel 1 (
13
+ git commit -m "%COMMIT_MSG%"
14
+ if not errorlevel 1 (
15
+ if exist "%CD%\.holistic\system\sync-state.ps1" (
16
+ powershell -NoProfile -ExecutionPolicy Bypass -File "%CD%\.holistic\system\sync-state.ps1"
17
+ )
18
+ node --experimental-strip-types "%SCRIPT_DIR%..\src\cli.ts" internal-mark-commit --message "%COMMIT_MSG%"
19
+ )
20
+ )
21
+ )
22
+ )
23
+ )
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env node
2
+ import { spawnSync } from "node:child_process";
3
+ import { fileURLToPath } from "node:url";
4
+ import fs from "node:fs";
5
+ import path from "node:path";
6
+
7
+ const currentFile = fileURLToPath(import.meta.url);
8
+ const repoRoot = path.resolve(path.dirname(currentFile), "..");
9
+ const cliPath = path.resolve(repoRoot, "dist/cli.js");
10
+ const args = process.argv.slice(2);
11
+ const result = spawnSync(process.execPath, [cliPath, ...args], {
12
+ stdio: "inherit",
13
+ cwd: process.cwd(),
14
+ });
15
+
16
+ if (result.status !== 0) {
17
+ process.exit(result.status ?? 1);
18
+ }
19
+
20
+ if (args[0] === "handoff") {
21
+ const pendingCommitPath = path.join(process.cwd(), ".holistic", "context", "pending-commit.txt");
22
+ if (fs.existsSync(pendingCommitPath)) {
23
+ const message = fs.readFileSync(pendingCommitPath, "utf8").split(/\r?\n/)[0]?.trim();
24
+ if (message) {
25
+ const addResult = spawnSync("git", ["add", "--", "HOLISTIC.md", "AGENTS.md", ".holistic"], {
26
+ stdio: "inherit",
27
+ cwd: process.cwd(),
28
+ });
29
+ if ((addResult.status ?? 1) === 0) {
30
+ const commitResult = spawnSync("git", ["commit", "-m", message], {
31
+ stdio: "inherit",
32
+ cwd: process.cwd(),
33
+ });
34
+ if ((commitResult.status ?? 1) === 0) {
35
+ const syncScript = path.join(process.cwd(), ".holistic", "system", process.platform === "win32" ? "sync-state.ps1" : "sync-state.sh");
36
+ if (fs.existsSync(syncScript)) {
37
+ if (process.platform === "win32") {
38
+ spawnSync("powershell", ["-NoProfile", "-ExecutionPolicy", "Bypass", "-File", syncScript], {
39
+ stdio: "inherit",
40
+ cwd: process.cwd(),
41
+ });
42
+ } else {
43
+ spawnSync("/bin/sh", [syncScript], {
44
+ stdio: "inherit",
45
+ cwd: process.cwd(),
46
+ });
47
+ }
48
+ }
49
+ spawnSync(process.execPath, [cliPath, "internal-mark-commit", "--message", message], {
50
+ stdio: "inherit",
51
+ cwd: process.cwd(),
52
+ });
53
+ }
54
+ }
55
+ }
56
+ }
57
+ }
58
+
59
+ process.exit(0);
@@ -0,0 +1,5 @@
1
+ export declare const tests: {
2
+ name: string;
3
+ run: () => void;
4
+ }[];
5
+ //# sourceMappingURL=mcp-notification.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-notification.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/mcp-notification.test.ts"],"names":[],"mappings":"AA4CA,eAAO,MAAM,KAAK;;;GAgOjB,CAAC"}