@bookedsolid/reagent 0.7.2 → 0.11.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 +277 -140
- package/agents/engineering/pr-voice-reviewer.md +229 -0
- package/agents/product-owner.md +152 -0
- package/agents/reagent-orchestrator.md +8 -0
- package/commands/pm-status.md +230 -0
- package/commands/review-pr.md +197 -0
- package/dist/cli/commands/catalyze/gap-detector.d.ts.map +1 -1
- package/dist/cli/commands/catalyze/gap-detector.js +1 -3
- package/dist/cli/commands/catalyze/gap-detector.js.map +1 -1
- package/dist/cli/commands/daemon/eject.d.ts +13 -0
- package/dist/cli/commands/daemon/eject.d.ts.map +1 -0
- package/dist/cli/commands/daemon/eject.js +74 -0
- package/dist/cli/commands/daemon/eject.js.map +1 -0
- package/dist/cli/commands/daemon/index.d.ts +5 -0
- package/dist/cli/commands/daemon/index.d.ts.map +1 -0
- package/dist/cli/commands/daemon/index.js +64 -0
- package/dist/cli/commands/daemon/index.js.map +1 -0
- package/dist/cli/commands/daemon/restart.d.ts +10 -0
- package/dist/cli/commands/daemon/restart.d.ts.map +1 -0
- package/dist/cli/commands/daemon/restart.js +20 -0
- package/dist/cli/commands/daemon/restart.js.map +1 -0
- package/dist/cli/commands/daemon/start.d.ts +2 -0
- package/dist/cli/commands/daemon/start.d.ts.map +1 -0
- package/dist/cli/commands/daemon/start.js +143 -0
- package/dist/cli/commands/daemon/start.js.map +1 -0
- package/dist/cli/commands/daemon/status.d.ts +2 -0
- package/dist/cli/commands/daemon/status.d.ts.map +1 -0
- package/dist/cli/commands/daemon/status.js +90 -0
- package/dist/cli/commands/daemon/status.js.map +1 -0
- package/dist/cli/commands/daemon/stop.d.ts +2 -0
- package/dist/cli/commands/daemon/stop.d.ts.map +1 -0
- package/dist/cli/commands/daemon/stop.js +73 -0
- package/dist/cli/commands/daemon/stop.js.map +1 -0
- package/dist/cli/commands/init/claude-hooks.d.ts +1 -1
- package/dist/cli/commands/init/claude-hooks.d.ts.map +1 -1
- package/dist/cli/commands/init/claude-hooks.js +10 -4
- package/dist/cli/commands/init/claude-hooks.js.map +1 -1
- package/dist/cli/commands/init/index.d.ts.map +1 -1
- package/dist/cli/commands/init/index.js +5 -1
- package/dist/cli/commands/init/index.js.map +1 -1
- package/dist/cli/commands/init/policy.d.ts.map +1 -1
- package/dist/cli/commands/init/policy.js +21 -0
- package/dist/cli/commands/init/policy.js.map +1 -1
- package/dist/cli/commands/init/types.d.ts +16 -0
- package/dist/cli/commands/init/types.d.ts.map +1 -1
- package/dist/cli/index.js +9 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/daemon-loader.d.ts +16 -0
- package/dist/config/daemon-loader.d.ts.map +1 -0
- package/dist/config/daemon-loader.js +76 -0
- package/dist/config/daemon-loader.js.map +1 -0
- package/dist/config/gateway-config.d.ts.map +1 -1
- package/dist/config/gateway-config.js +6 -0
- package/dist/config/gateway-config.js.map +1 -1
- package/dist/config/policy-loader.d.ts +27 -0
- package/dist/config/policy-loader.d.ts.map +1 -1
- package/dist/config/policy-loader.js +103 -10
- package/dist/config/policy-loader.js.map +1 -1
- package/dist/gateway/circuit-breaker.d.ts +60 -0
- package/dist/gateway/circuit-breaker.d.ts.map +1 -0
- package/dist/gateway/circuit-breaker.js +104 -0
- package/dist/gateway/circuit-breaker.js.map +1 -0
- package/dist/gateway/collision-detector.d.ts +31 -0
- package/dist/gateway/collision-detector.d.ts.map +1 -0
- package/dist/gateway/collision-detector.js +53 -0
- package/dist/gateway/collision-detector.js.map +1 -0
- package/dist/gateway/middleware/blocked-paths.js +2 -2
- package/dist/gateway/middleware/blocked-paths.js.map +1 -1
- package/dist/gateway/middleware/circuit-breaker.d.ts +12 -0
- package/dist/gateway/middleware/circuit-breaker.d.ts.map +1 -0
- package/dist/gateway/middleware/circuit-breaker.js +44 -0
- package/dist/gateway/middleware/circuit-breaker.js.map +1 -0
- package/dist/gateway/middleware/injection.d.ts +23 -0
- package/dist/gateway/middleware/injection.d.ts.map +1 -0
- package/dist/gateway/middleware/injection.js +129 -0
- package/dist/gateway/middleware/injection.js.map +1 -0
- package/dist/gateway/middleware/policy.js +2 -2
- package/dist/gateway/middleware/policy.js.map +1 -1
- package/dist/gateway/middleware/rate-limit.d.ts +13 -0
- package/dist/gateway/middleware/rate-limit.d.ts.map +1 -0
- package/dist/gateway/middleware/rate-limit.js +32 -0
- package/dist/gateway/middleware/rate-limit.js.map +1 -0
- package/dist/gateway/middleware/redact.d.ts.map +1 -1
- package/dist/gateway/middleware/redact.js +7 -0
- package/dist/gateway/middleware/redact.js.map +1 -1
- package/dist/gateway/middleware/result-size-cap.d.ts +14 -0
- package/dist/gateway/middleware/result-size-cap.d.ts.map +1 -0
- package/dist/gateway/middleware/result-size-cap.js +49 -0
- package/dist/gateway/middleware/result-size-cap.js.map +1 -0
- package/dist/gateway/native-tools.js +1 -1
- package/dist/gateway/native-tools.js.map +1 -1
- package/dist/gateway/rate-limiter.d.ts +47 -0
- package/dist/gateway/rate-limiter.d.ts.map +1 -0
- package/dist/gateway/rate-limiter.js +89 -0
- package/dist/gateway/rate-limiter.js.map +1 -0
- package/dist/gateway/server.d.ts.map +1 -1
- package/dist/gateway/server.js +27 -1
- package/dist/gateway/server.js.map +1 -1
- package/dist/gateway/tool-proxy.js +1 -1
- package/dist/gateway/tool-proxy.js.map +1 -1
- package/dist/types/daemon.d.ts +45 -0
- package/dist/types/daemon.d.ts.map +1 -0
- package/dist/types/daemon.js +2 -0
- package/dist/types/daemon.js.map +1 -0
- package/dist/types/gateway.d.ts +9 -0
- package/dist/types/gateway.d.ts.map +1 -1
- package/dist/types/policy.d.ts +1 -0
- package/dist/types/policy.d.ts.map +1 -1
- package/hooks/_lib/discord.sh +75 -0
- package/hooks/blocked-paths-enforcer.sh +0 -1
- package/hooks/changeset-security-gate.sh +143 -0
- package/hooks/commit-review-gate.sh +40 -10
- package/hooks/import-guard.sh +14 -0
- package/hooks/network-exfil-guard.sh +20 -2
- package/hooks/pr-issue-link-gate.sh +65 -0
- package/hooks/push-review-gate.sh +17 -2
- package/hooks/rate-limit-guard.sh +26 -2
- package/hooks/reagent-notify.sh +65 -0
- package/hooks/security-disclosure-gate.sh +146 -0
- package/husky/pre-push.sh +84 -0
- package/package.json +12 -2
- package/profiles/bst-internal.json +12 -2
- package/profiles/client-engagement.json +12 -2
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
Fetch a pull request diff, run code-reviewer analysis, translate findings to owner voice, and post a single batched inline GitHub review.
|
|
2
|
+
|
|
3
|
+
## Usage
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
/review-pr <PR#> [--tier standard|senior|chief] [--task T-NNN]
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
**Arguments:**
|
|
10
|
+
|
|
11
|
+
- `<PR#>` — pull request number (required)
|
|
12
|
+
- `--tier` — review depth: `standard` (default), `senior`, or `chief`
|
|
13
|
+
- `--task` — optional JSONL task ID to mark `completed` after the review posts (e.g. `--task T-047`)
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Step 1 — Check prerequisites
|
|
18
|
+
|
|
19
|
+
Before anything else:
|
|
20
|
+
|
|
21
|
+
1. Read `.reagent/policy.yaml` — confirm autonomy level is L1 or higher
|
|
22
|
+
2. Check for `.reagent/HALT` — if present, stop immediately
|
|
23
|
+
3. Verify `gh` CLI is available: `gh --version`
|
|
24
|
+
4. Confirm caller is in a git repo with a GitHub remote: `gh repo view --json nameWithOwner`
|
|
25
|
+
|
|
26
|
+
Extract `owner/repo` for use in API calls.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Step 2 — Fetch PR context
|
|
31
|
+
|
|
32
|
+
Run these in parallel:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
gh pr view <PR#> --json title,body,headRefName,baseRefName,state,commits
|
|
36
|
+
gh pr diff <PR#>
|
|
37
|
+
gh pr view <PR#> --json commits --jq '.commits[-1].oid'
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Store:
|
|
41
|
+
|
|
42
|
+
- `COMMIT_SHA` — the latest commit OID (use in the review payload)
|
|
43
|
+
- `PR_TITLE` — for context
|
|
44
|
+
- `PR_DIFF` — the full diff text (pass to code-reviewer)
|
|
45
|
+
|
|
46
|
+
If the PR is merged or closed, warn the user: "PR #N is already closed — review will post but won't block a merge."
|
|
47
|
+
|
|
48
|
+
If `gh pr diff` returns an empty diff, stop and report: "Empty diff — nothing to review."
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Step 3 — Run code-reviewer analysis
|
|
53
|
+
|
|
54
|
+
Invoke the `code-reviewer` agent with the diff and the specified tier.
|
|
55
|
+
|
|
56
|
+
**Pass this context to code-reviewer:**
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
Tier: <standard|senior|chief>
|
|
60
|
+
|
|
61
|
+
Review the following git diff and produce structured findings as a JSON array.
|
|
62
|
+
Each finding must include:
|
|
63
|
+
- file: string (file path from diff header)
|
|
64
|
+
- line: number (line number in the NEW file)
|
|
65
|
+
- start_line?: number (for multi-line spans, the start line)
|
|
66
|
+
- severity: "high" | "medium" | "low"
|
|
67
|
+
- issue: string (the specific problem — no hedging)
|
|
68
|
+
- suggestion_code?: string (the corrected code, if applicable)
|
|
69
|
+
|
|
70
|
+
Output ONLY the JSON array. No prose. No markdown wrapper. Example:
|
|
71
|
+
[
|
|
72
|
+
{
|
|
73
|
+
"file": "src/gateway/middleware/chain.ts",
|
|
74
|
+
"line": 42,
|
|
75
|
+
"severity": "high",
|
|
76
|
+
"issue": "Non-null assertion will throw if upstream returns undefined",
|
|
77
|
+
"suggestion_code": "const result = upstream ?? defaultValue;"
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
|
|
81
|
+
If there are no findings, output: []
|
|
82
|
+
|
|
83
|
+
DIFF:
|
|
84
|
+
<paste full diff here>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Capture the JSON array output as `FINDINGS`.
|
|
88
|
+
|
|
89
|
+
If `FINDINGS` is `[]` or empty, set `FINDINGS = []` and proceed — the voice reviewer will write a clean summary.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Step 4 — Run pr-voice-reviewer
|
|
94
|
+
|
|
95
|
+
Invoke the `pr-voice-reviewer` agent with `FINDINGS` and `COMMIT_SHA`.
|
|
96
|
+
|
|
97
|
+
**Pass this context:**
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
Commit SHA: <COMMIT_SHA>
|
|
101
|
+
|
|
102
|
+
Translate the following code-reviewer findings into a GitHub review payload
|
|
103
|
+
written in the project owner's voice. Follow the pr-voice-reviewer agent
|
|
104
|
+
instructions exactly.
|
|
105
|
+
|
|
106
|
+
Findings:
|
|
107
|
+
<FINDINGS as JSON>
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Capture the full JSON payload as `REVIEW_PAYLOAD`.
|
|
111
|
+
|
|
112
|
+
Validate the payload has:
|
|
113
|
+
|
|
114
|
+
- `commit_id` matching `COMMIT_SHA`
|
|
115
|
+
- `body` (non-empty string)
|
|
116
|
+
- `event` one of: `REQUEST_CHANGES`, `COMMENT`, `APPROVE`
|
|
117
|
+
- `comments` array (may be empty if findings were empty)
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Step 5 — Post batched review
|
|
122
|
+
|
|
123
|
+
Post the review in a single API call:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
gh api repos/{owner}/{repo}/pulls/<PR#>/reviews \
|
|
127
|
+
--method POST \
|
|
128
|
+
--input - <<'PAYLOAD'
|
|
129
|
+
<REVIEW_PAYLOAD as JSON>
|
|
130
|
+
PAYLOAD
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
On success (HTTP 200/201):
|
|
134
|
+
|
|
135
|
+
- Report: "Review posted — <event> on PR #N (<N> inline comments)"
|
|
136
|
+
- Print the review URL from the response (`html_url`)
|
|
137
|
+
|
|
138
|
+
On failure:
|
|
139
|
+
|
|
140
|
+
- Print the full error response
|
|
141
|
+
- Do NOT retry automatically — report to user and stop
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Step 6 — Close task (if --task was provided)
|
|
146
|
+
|
|
147
|
+
If `--task T-NNN` was passed, call `task_update` to mark it resolved:
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
task_update({
|
|
151
|
+
id: "<T-NNN>",
|
|
152
|
+
status: "completed",
|
|
153
|
+
commit_ref: "<COMMIT_SHA>",
|
|
154
|
+
description: "Code review posted — <N> findings on PR #<PR#>. See <html_url>"
|
|
155
|
+
})
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
If `task_update` fails (task not found, MCP unavailable), warn the user but do not fail the overall command — the review already posted.
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Step 7 — Report summary
|
|
163
|
+
|
|
164
|
+
Output a clean summary:
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
PR #<N>: <title>
|
|
168
|
+
Tier: <standard|senior|chief>
|
|
169
|
+
Findings: <count> (<high> high, <medium> medium, <low> low)
|
|
170
|
+
Event: REQUEST_CHANGES | COMMENT | APPROVE
|
|
171
|
+
Review: <html_url>
|
|
172
|
+
Task: T-NNN → completed (or "no task linked")
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Error handling
|
|
178
|
+
|
|
179
|
+
| Situation | Action |
|
|
180
|
+
| ---------------------------------- | ------------------------------------------------------------------ |
|
|
181
|
+
| PR not found | Stop — "PR #N not found. Check the number and repo." |
|
|
182
|
+
| HALT file present | Stop — "Agent operations frozen. Check .reagent/HALT." |
|
|
183
|
+
| Empty diff | Stop — "Empty diff — nothing to review." |
|
|
184
|
+
| code-reviewer returns invalid JSON | Stop — "code-reviewer output was not valid JSON. Raw output: ..." |
|
|
185
|
+
| GitHub API error | Stop — print full error, do not retry |
|
|
186
|
+
| Already reviewed this commit | Warn but continue — GitHub allows multiple reviews per commit |
|
|
187
|
+
| task_update fails | Warn but continue — review already posted; close the task manually |
|
|
188
|
+
| --task references unknown task ID | Warn but continue — skip the update, don't block the review |
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Notes
|
|
193
|
+
|
|
194
|
+
- GitHub suggestion syntax in comment bodies renders as an "Apply suggestion" button in the PR UI. The pr-voice-reviewer agent handles this formatting.
|
|
195
|
+
- Multi-line comments require both `start_line` and `line` in the comments array. The `start_line` must be less than `line`. If they're equal, omit `start_line`.
|
|
196
|
+
- The review posts as the authenticated `gh` user — make sure `gh auth status` shows the correct account before running.
|
|
197
|
+
- For large diffs (>500 lines), the code-reviewer may miss context across files. Consider running `--tier senior` or `--tier chief` for better coverage.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gap-detector.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/catalyze/gap-detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAO,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"gap-detector.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/catalyze/gap-detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAO,WAAW,EAAE,MAAM,YAAY,CAAC;AA8WlE;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,aAAa,GAAG,WAAW,CA0C/D"}
|
|
@@ -68,8 +68,6 @@ function detectAstroGaps(analysis) {
|
|
|
68
68
|
});
|
|
69
69
|
}
|
|
70
70
|
// Gate: astro check
|
|
71
|
-
const scripts = analysis.targetDir ? {} : {};
|
|
72
|
-
void scripts; // Placeholder — real scripts are read during stack analysis
|
|
73
71
|
gaps.push({
|
|
74
72
|
id: nextId(),
|
|
75
73
|
severity: 'critical',
|
|
@@ -353,7 +351,7 @@ export function detectGaps(analysis) {
|
|
|
353
351
|
gaps,
|
|
354
352
|
totalRecommendedHooks: BASE_HOOKS.length,
|
|
355
353
|
installedHookCount: analysis.installedHooks.length,
|
|
356
|
-
totalRecommendedGates:
|
|
354
|
+
totalRecommendedGates: gaps.filter((g) => g.category === 'gate').length,
|
|
357
355
|
};
|
|
358
356
|
}
|
|
359
357
|
//# sourceMappingURL=gap-detector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gap-detector.js","sourceRoot":"","sources":["../../../../src/cli/commands/catalyze/gap-detector.ts"],"names":[],"mappings":"AAEA,yDAAyD;AACzD,MAAM,UAAU,GAAG;IACjB,gBAAgB;IAChB,4BAA4B;IAC5B,qBAAqB;IACrB,wBAAwB;IACxB,uBAAuB;IACvB,sBAAsB;IACtB,oBAAoB;IACpB,kBAAkB;IAClB,qBAAqB;IACrB,mBAAmB;IACnB,mBAAmB;IACnB,iBAAiB;IACjB,eAAe;IACf,kBAAkB;IAClB,qBAAqB;IACrB,kBAAkB;IAClB,sBAAsB;IACtB,cAAc;CACf,CAAC;AAEF,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,SAAS,MAAM;IACb,OAAO,KAAK,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,QAAuB;IACjD,MAAM,IAAI,GAAU,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAEnD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG;gBACjB,gBAAgB;gBAChB,4BAA4B;gBAC5B,mBAAmB;gBACnB,qBAAqB;aACtB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEjB,IAAI,CAAC,IAAI,CAAC;gBACR,EAAE,EAAE,MAAM,EAAE;gBACZ,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM;gBAC1C,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,iBAAiB,IAAI,KAAK;gBACjC,WAAW,EAAE,QAAQ,IAAI,2EAA2E;gBACpG,UAAU,EAAE,+CAA+C;aAC5D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,QAAuB;IAC9C,MAAM,IAAI,GAAU,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAEnD,wBAAwB;IACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC;YACR,EAAE,EAAE,MAAM,EAAE;YACZ,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,kCAAkC;YACzC,WAAW,EACT,wGAAwG;YAC1G,UAAU,EAAE,wEAAwE;YACpF,YAAY,EAAE,CAAC,OAAO,CAAC;SACxB,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB;IACpB,
|
|
1
|
+
{"version":3,"file":"gap-detector.js","sourceRoot":"","sources":["../../../../src/cli/commands/catalyze/gap-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `reagent daemon eject` — unconditional nuclear kill.
|
|
3
|
+
*
|
|
4
|
+
* Does not attempt graceful shutdown. Suitable as a last resort when the
|
|
5
|
+
* daemon is stuck and `reagent daemon stop` is unresponsive.
|
|
6
|
+
*
|
|
7
|
+
* Steps:
|
|
8
|
+
* 1. SIGKILL the PID recorded in ~/.reagent/daemon.pid
|
|
9
|
+
* 2. pkill -f reagent-daemon as a fallback (catches orphans not in PID file)
|
|
10
|
+
* 3. Remove ~/.reagent/daemon.pid
|
|
11
|
+
*/
|
|
12
|
+
export declare function runDaemonEject(_args: string[]): void;
|
|
13
|
+
//# sourceMappingURL=eject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eject.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/daemon/eject.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAoDpD"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import { execSync } from 'node:child_process';
|
|
5
|
+
/** Path to the PID file written by the daemon on startup. */
|
|
6
|
+
function getPidFilePath() {
|
|
7
|
+
return path.join(os.homedir(), '.reagent', 'daemon.pid');
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* `reagent daemon eject` — unconditional nuclear kill.
|
|
11
|
+
*
|
|
12
|
+
* Does not attempt graceful shutdown. Suitable as a last resort when the
|
|
13
|
+
* daemon is stuck and `reagent daemon stop` is unresponsive.
|
|
14
|
+
*
|
|
15
|
+
* Steps:
|
|
16
|
+
* 1. SIGKILL the PID recorded in ~/.reagent/daemon.pid
|
|
17
|
+
* 2. pkill -f reagent-daemon as a fallback (catches orphans not in PID file)
|
|
18
|
+
* 3. Remove ~/.reagent/daemon.pid
|
|
19
|
+
*/
|
|
20
|
+
export function runDaemonEject(_args) {
|
|
21
|
+
const pidPath = getPidFilePath();
|
|
22
|
+
let killedViaPid = false;
|
|
23
|
+
// Step 1: kill via PID file
|
|
24
|
+
if (fs.existsSync(pidPath)) {
|
|
25
|
+
const raw = fs.readFileSync(pidPath, 'utf8').trim();
|
|
26
|
+
const pid = parseInt(raw, 10);
|
|
27
|
+
if (!isNaN(pid)) {
|
|
28
|
+
try {
|
|
29
|
+
process.kill(pid, 'SIGKILL');
|
|
30
|
+
console.log(`[reagent] SIGKILL sent to daemon (PID ${pid})`);
|
|
31
|
+
killedViaPid = true;
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
35
|
+
// ESRCH means the process does not exist — not an error for eject
|
|
36
|
+
if (err.code !== 'ESRCH') {
|
|
37
|
+
console.error(`[reagent] Could not SIGKILL PID ${pid}: ${msg}`);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.log(`[reagent] PID ${pid} was not running (stale PID file)`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
console.error(`[reagent] PID file contains invalid value: ${JSON.stringify(raw)}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
console.log(`[reagent] No PID file found at ${pidPath}`);
|
|
50
|
+
}
|
|
51
|
+
// Step 2: pkill fallback — catches orphaned processes not tracked by PID file
|
|
52
|
+
try {
|
|
53
|
+
execSync('pkill -KILL -f reagent-daemon 2>/dev/null || true', { stdio: 'ignore' });
|
|
54
|
+
if (!killedViaPid) {
|
|
55
|
+
console.log('[reagent] pkill -KILL -f reagent-daemon executed (orphan sweep)');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// pkill exits non-zero when no processes matched — that is acceptable
|
|
60
|
+
}
|
|
61
|
+
// Step 3: remove PID file
|
|
62
|
+
if (fs.existsSync(pidPath)) {
|
|
63
|
+
try {
|
|
64
|
+
fs.unlinkSync(pidPath);
|
|
65
|
+
console.log(`[reagent] Removed PID file: ${pidPath}`);
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
69
|
+
console.error(`[reagent] Could not remove PID file: ${msg}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
console.log('[reagent] Eject complete.\n');
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=eject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eject.js","sourceRoot":"","sources":["../../../../src/cli/commands/daemon/eject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,6DAA6D;AAC7D,SAAS,cAAc;IACrB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAC,KAAe;IAC5C,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,4BAA4B;IAC5B,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAE9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,yCAAyC,GAAG,GAAG,CAAC,CAAC;gBAC7D,YAAY,GAAG,IAAI,CAAC;YACtB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,kEAAkE;gBAClE,IAAK,GAA6B,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBACpD,OAAO,CAAC,KAAK,CAAC,mCAAmC,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;gBAClE,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,mCAAmC,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,8CAA8C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,8EAA8E;IAC9E,IAAI,CAAC;QACH,QAAQ,CAAC,mDAAmD,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sEAAsE;IACxE,CAAC;IAED,0BAA0B;IAC1B,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,+BAA+B,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,CAAC,KAAK,CAAC,wCAAwC,GAAG,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/daemon/index.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA6B9C"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { runDaemonStart } from './start.js';
|
|
2
|
+
import { runDaemonStop } from './stop.js';
|
|
3
|
+
import { runDaemonStatus } from './status.js';
|
|
4
|
+
import { runDaemonRestart } from './restart.js';
|
|
5
|
+
import { runDaemonEject } from './eject.js';
|
|
6
|
+
/**
|
|
7
|
+
* Entry point for `reagent daemon <subcommand> [options]`.
|
|
8
|
+
*/
|
|
9
|
+
export function runDaemon(args) {
|
|
10
|
+
const [sub, ...rest] = args;
|
|
11
|
+
if (!sub || sub === 'help' || sub === '--help' || sub === '-h') {
|
|
12
|
+
printDaemonHelp();
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
switch (sub) {
|
|
16
|
+
case 'start':
|
|
17
|
+
runDaemonStart(rest);
|
|
18
|
+
break;
|
|
19
|
+
case 'stop':
|
|
20
|
+
runDaemonStop(rest);
|
|
21
|
+
break;
|
|
22
|
+
case 'status':
|
|
23
|
+
runDaemonStatus(rest);
|
|
24
|
+
break;
|
|
25
|
+
case 'restart':
|
|
26
|
+
runDaemonRestart(rest);
|
|
27
|
+
break;
|
|
28
|
+
case 'eject':
|
|
29
|
+
runDaemonEject(rest);
|
|
30
|
+
break;
|
|
31
|
+
default:
|
|
32
|
+
console.error(`\nUnknown daemon subcommand: ${sub}`);
|
|
33
|
+
printDaemonHelp();
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function printDaemonHelp() {
|
|
38
|
+
console.log(`
|
|
39
|
+
reagent daemon — persistent HTTP/SSE multi-project MCP gateway
|
|
40
|
+
|
|
41
|
+
Usage:
|
|
42
|
+
reagent daemon <subcommand> [options]
|
|
43
|
+
|
|
44
|
+
Subcommands:
|
|
45
|
+
start Start the daemon in the background
|
|
46
|
+
stop Stop the running daemon
|
|
47
|
+
status Show daemon health and active sessions
|
|
48
|
+
restart Gracefully restart the daemon
|
|
49
|
+
eject Nuclear kill — SIGKILL daemon and sweep orphans (last resort)
|
|
50
|
+
|
|
51
|
+
Options for start:
|
|
52
|
+
--port <port> Override the listen port (default: 3737)
|
|
53
|
+
--bind <addr> Override the bind address (default: 127.0.0.1)
|
|
54
|
+
--foreground Run in foreground instead of backgrounding
|
|
55
|
+
|
|
56
|
+
Examples:
|
|
57
|
+
reagent daemon start
|
|
58
|
+
reagent daemon start --port 8888
|
|
59
|
+
reagent daemon status
|
|
60
|
+
reagent daemon stop
|
|
61
|
+
reagent daemon restart
|
|
62
|
+
`);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/daemon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAE5B,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC/D,eAAe,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO;YACV,cAAc,CAAC,IAAI,CAAC,CAAC;YACrB,MAAM;QACR,KAAK,MAAM;YACT,aAAa,CAAC,IAAI,CAAC,CAAC;YACpB,MAAM;QACR,KAAK,QAAQ;YACX,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,MAAM;QACR,KAAK,SAAS;YACZ,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM;QACR,KAAK,OAAO;YACV,cAAc,CAAC,IAAI,CAAC,CAAC;YACrB,MAAM;QACR;YACE,OAAO,CAAC,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;YACrD,eAAe,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;CAwBb,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graceful restart: stop the running daemon (SIGTERM + poll for exit),
|
|
3
|
+
* then start a fresh instance once the process has actually exited.
|
|
4
|
+
*
|
|
5
|
+
* runDaemonStop accepts an onDone callback that fires only after the daemon
|
|
6
|
+
* process is confirmed dead, preventing the new instance from racing the old
|
|
7
|
+
* one for the port binding.
|
|
8
|
+
*/
|
|
9
|
+
export declare function runDaemonRestart(args: string[]): void;
|
|
10
|
+
//# sourceMappingURL=restart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/daemon/restart.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAQrD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { runDaemonStop } from './stop.js';
|
|
2
|
+
import { runDaemonStart } from './start.js';
|
|
3
|
+
/**
|
|
4
|
+
* Graceful restart: stop the running daemon (SIGTERM + poll for exit),
|
|
5
|
+
* then start a fresh instance once the process has actually exited.
|
|
6
|
+
*
|
|
7
|
+
* runDaemonStop accepts an onDone callback that fires only after the daemon
|
|
8
|
+
* process is confirmed dead, preventing the new instance from racing the old
|
|
9
|
+
* one for the port binding.
|
|
10
|
+
*/
|
|
11
|
+
export function runDaemonRestart(args) {
|
|
12
|
+
console.log('\nRestarting reagent daemon...');
|
|
13
|
+
runDaemonStop([], () => {
|
|
14
|
+
// Brief pause so the OS can release the port binding before re-launch.
|
|
15
|
+
setTimeout(() => {
|
|
16
|
+
runDaemonStart(args);
|
|
17
|
+
}, 200);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=restart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart.js","sourceRoot":"","sources":["../../../../src/cli/commands/daemon/restart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAc;IAC7C,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC9C,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE;QACrB,uEAAuE;QACvE,UAAU,CAAC,GAAG,EAAE;YACd,cAAc,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/daemon/start.ts"],"names":[],"mappings":"AAiFA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA4FnD"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import { spawn } from 'node:child_process';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { parseFlag } from '../../utils.js';
|
|
7
|
+
import { loadDaemonConfig } from '../../../config/daemon-loader.js';
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = path.dirname(__filename);
|
|
10
|
+
/** Path to the PID file written when the daemon starts. */
|
|
11
|
+
function getPidFilePath() {
|
|
12
|
+
return path.join(os.homedir(), '.reagent', 'daemon.pid');
|
|
13
|
+
}
|
|
14
|
+
/** Resolve the compiled Rust daemon binary path relative to the package root. */
|
|
15
|
+
function resolveDaemonBinary() {
|
|
16
|
+
// Walk up from dist/cli/commands/daemon/ to find the package root, then
|
|
17
|
+
// look for the platform binary in bin/reagent-daemon-<platform>
|
|
18
|
+
const pkgRoot = path.join(__dirname, '..', '..', '..', '..');
|
|
19
|
+
const platform = process.platform;
|
|
20
|
+
const arch = process.arch;
|
|
21
|
+
// Map Node.js platform/arch to the binary name convention used by the
|
|
22
|
+
// Rust build and npm optional dependency packages
|
|
23
|
+
const platformMap = {
|
|
24
|
+
'darwin-arm64': 'reagent-daemon-darwin-arm64',
|
|
25
|
+
'darwin-x64': 'reagent-daemon-darwin-x64',
|
|
26
|
+
'linux-x64': 'reagent-daemon-linux-x64',
|
|
27
|
+
};
|
|
28
|
+
const key = `${platform}-${arch}`;
|
|
29
|
+
const binaryName = platformMap[key] ?? 'reagent-daemon';
|
|
30
|
+
// Check platform-specific optional package first (npm distribution)
|
|
31
|
+
const optionalPkgBin = path.join(pkgRoot, 'node_modules', `@bookedsolid/${binaryName}`, 'bin', binaryName);
|
|
32
|
+
if (fs.existsSync(optionalPkgBin)) {
|
|
33
|
+
return optionalPkgBin;
|
|
34
|
+
}
|
|
35
|
+
// Fall back to local build output (development)
|
|
36
|
+
const localBin = path.join(pkgRoot, 'daemon', 'target', 'release', 'reagent-daemon');
|
|
37
|
+
if (fs.existsSync(localBin)) {
|
|
38
|
+
return localBin;
|
|
39
|
+
}
|
|
40
|
+
throw new Error(`reagent daemon binary not found for platform ${key}.\n` +
|
|
41
|
+
` Looked for: ${optionalPkgBin}\n` +
|
|
42
|
+
` : ${localBin}\n` +
|
|
43
|
+
` Run \`cargo build --release\` inside daemon/ to build locally, or ensure the\n` +
|
|
44
|
+
` @bookedsolid/${binaryName} optional package is installed.`);
|
|
45
|
+
}
|
|
46
|
+
/** Read the existing PID file and check if the process is alive. */
|
|
47
|
+
function getRunningPid() {
|
|
48
|
+
const pidPath = getPidFilePath();
|
|
49
|
+
if (!fs.existsSync(pidPath))
|
|
50
|
+
return null;
|
|
51
|
+
const raw = fs.readFileSync(pidPath, 'utf8').trim();
|
|
52
|
+
const pid = parseInt(raw, 10);
|
|
53
|
+
if (isNaN(pid))
|
|
54
|
+
return null;
|
|
55
|
+
// Send signal 0 to check if the process exists without affecting it
|
|
56
|
+
try {
|
|
57
|
+
process.kill(pid, 0);
|
|
58
|
+
return pid;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Process not found — stale PID file
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export function runDaemonStart(args) {
|
|
66
|
+
const foreground = args.includes('--foreground');
|
|
67
|
+
const portOverride = parseFlag(args, '--port');
|
|
68
|
+
const bindOverride = parseFlag(args, '--bind');
|
|
69
|
+
// Check if already running
|
|
70
|
+
const existingPid = getRunningPid();
|
|
71
|
+
if (existingPid !== null) {
|
|
72
|
+
console.log(`\nreagent daemon is already running (PID ${existingPid})`);
|
|
73
|
+
console.log(` Run \`reagent daemon status\` to inspect it.`);
|
|
74
|
+
console.log(` Run \`reagent daemon restart\` to restart it.\n`);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
// Load config (falls back to defaults if ~/.reagent/daemon.yaml absent)
|
|
78
|
+
let config;
|
|
79
|
+
try {
|
|
80
|
+
config = loadDaemonConfig();
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
console.error(`[reagent] Failed to load daemon config: ${err instanceof Error ? err.message : err}`);
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
const port = portOverride ? parseInt(portOverride, 10) : config.port;
|
|
87
|
+
const bind = bindOverride ?? config.bind;
|
|
88
|
+
if (isNaN(port) || port < 1 || port > 65535) {
|
|
89
|
+
console.error(`[reagent] Invalid port: ${portOverride}`);
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
// Resolve binary
|
|
93
|
+
let binaryPath;
|
|
94
|
+
try {
|
|
95
|
+
binaryPath = resolveDaemonBinary();
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
console.error(`[reagent] ${err instanceof Error ? err.message : err}`);
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
const env = {
|
|
102
|
+
...process.env,
|
|
103
|
+
RUST_LOG: config.log_level,
|
|
104
|
+
REAGENT_DAEMON_PORT: String(port),
|
|
105
|
+
REAGENT_DAEMON_BIND: bind,
|
|
106
|
+
REAGENT_DAEMON_SESSION_TTL: String(config.session_ttl_minutes),
|
|
107
|
+
};
|
|
108
|
+
if (foreground) {
|
|
109
|
+
console.log(`\nStarting reagent daemon on ${bind}:${port} (foreground)`);
|
|
110
|
+
console.log(` Binary: ${binaryPath}\n`);
|
|
111
|
+
const child = spawn(binaryPath, [], { env, stdio: 'inherit' });
|
|
112
|
+
child.on('exit', (code) => {
|
|
113
|
+
process.exit(code ?? 0);
|
|
114
|
+
});
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
// Background mode: detach child process and write PID file
|
|
118
|
+
const logDir = path.join(os.homedir(), '.reagent');
|
|
119
|
+
if (!fs.existsSync(logDir)) {
|
|
120
|
+
fs.mkdirSync(logDir, { recursive: true });
|
|
121
|
+
}
|
|
122
|
+
const logFile = path.join(logDir, 'daemon.log');
|
|
123
|
+
const logFd = fs.openSync(logFile, 'a');
|
|
124
|
+
const child = spawn(binaryPath, [], {
|
|
125
|
+
env,
|
|
126
|
+
stdio: ['ignore', logFd, logFd],
|
|
127
|
+
detached: true,
|
|
128
|
+
});
|
|
129
|
+
child.unref();
|
|
130
|
+
if (child.pid === undefined) {
|
|
131
|
+
console.error('[reagent] Failed to obtain daemon PID after spawn — daemon may not be running');
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
134
|
+
const pidPath = getPidFilePath();
|
|
135
|
+
fs.writeFileSync(pidPath, String(child.pid), 'utf8');
|
|
136
|
+
console.log(`\nreagent daemon started`);
|
|
137
|
+
console.log(` PID: ${child.pid}`);
|
|
138
|
+
console.log(` Address: http://${bind}:${port}`);
|
|
139
|
+
console.log(` Log: ${logFile}`);
|
|
140
|
+
console.log(` PID file: ${pidPath}`);
|
|
141
|
+
console.log(`\n Run \`reagent daemon status\` to confirm it is healthy.\n`);
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../../src/cli/commands/daemon/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/daemon/status.ts"],"names":[],"mappings":"AAmBA,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmEpE"}
|