@neurcode-ai/cli 0.14.0 → 0.15.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 (189) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +60 -8
  3. package/dist/api-client.d.ts +284 -0
  4. package/dist/api-client.d.ts.map +1 -1
  5. package/dist/api-client.js +111 -0
  6. package/dist/api-client.js.map +1 -1
  7. package/dist/commands/activate.d.ts +82 -0
  8. package/dist/commands/activate.d.ts.map +1 -0
  9. package/dist/commands/activate.js +551 -0
  10. package/dist/commands/activate.js.map +1 -0
  11. package/dist/commands/admission.d.ts +67 -0
  12. package/dist/commands/admission.d.ts.map +1 -0
  13. package/dist/commands/admission.js +350 -0
  14. package/dist/commands/admission.js.map +1 -0
  15. package/dist/commands/agent.d.ts +3 -0
  16. package/dist/commands/agent.d.ts.map +1 -0
  17. package/dist/commands/agent.js +2045 -0
  18. package/dist/commands/agent.js.map +1 -0
  19. package/dist/commands/demo.d.ts +3 -0
  20. package/dist/commands/demo.d.ts.map +1 -0
  21. package/dist/commands/demo.js +102 -0
  22. package/dist/commands/demo.js.map +1 -0
  23. package/dist/commands/init.d.ts.map +1 -1
  24. package/dist/commands/init.js +58 -44
  25. package/dist/commands/init.js.map +1 -1
  26. package/dist/commands/login.d.ts +1 -1
  27. package/dist/commands/login.d.ts.map +1 -1
  28. package/dist/commands/login.js +44 -22
  29. package/dist/commands/login.js.map +1 -1
  30. package/dist/commands/profile.d.ts +14 -0
  31. package/dist/commands/profile.d.ts.map +1 -0
  32. package/dist/commands/profile.js +118 -0
  33. package/dist/commands/profile.js.map +1 -0
  34. package/dist/commands/quickstart.d.ts +2 -2
  35. package/dist/commands/quickstart.d.ts.map +1 -1
  36. package/dist/commands/quickstart.js +31 -30
  37. package/dist/commands/quickstart.js.map +1 -1
  38. package/dist/commands/remediate-export.d.ts +6 -1
  39. package/dist/commands/remediate-export.d.ts.map +1 -1
  40. package/dist/commands/remediate-export.js +359 -7
  41. package/dist/commands/remediate-export.js.map +1 -1
  42. package/dist/commands/replay.d.ts.map +1 -1
  43. package/dist/commands/replay.js +84 -0
  44. package/dist/commands/replay.js.map +1 -1
  45. package/dist/commands/run.d.ts +3 -0
  46. package/dist/commands/run.d.ts.map +1 -0
  47. package/dist/commands/run.js +98 -0
  48. package/dist/commands/run.js.map +1 -0
  49. package/dist/commands/runtime-adapter.d.ts +8 -0
  50. package/dist/commands/runtime-adapter.d.ts.map +1 -0
  51. package/dist/commands/runtime-adapter.js +375 -0
  52. package/dist/commands/runtime-adapter.js.map +1 -0
  53. package/dist/commands/runtime-doctor.d.ts +6 -0
  54. package/dist/commands/runtime-doctor.d.ts.map +1 -0
  55. package/dist/commands/runtime-doctor.js +478 -0
  56. package/dist/commands/runtime-doctor.js.map +1 -0
  57. package/dist/commands/runtime-report.d.ts +13 -0
  58. package/dist/commands/runtime-report.d.ts.map +1 -0
  59. package/dist/commands/runtime-report.js +81 -0
  60. package/dist/commands/runtime-report.js.map +1 -0
  61. package/dist/commands/runtime-sync.d.ts +17 -0
  62. package/dist/commands/runtime-sync.d.ts.map +1 -0
  63. package/dist/commands/runtime-sync.js +656 -0
  64. package/dist/commands/runtime-sync.js.map +1 -0
  65. package/dist/commands/runtime.d.ts +16 -0
  66. package/dist/commands/runtime.d.ts.map +1 -0
  67. package/dist/commands/runtime.js +380 -0
  68. package/dist/commands/runtime.js.map +1 -0
  69. package/dist/commands/session-hook.d.ts +35 -0
  70. package/dist/commands/session-hook.d.ts.map +1 -0
  71. package/dist/commands/session-hook.js +1297 -0
  72. package/dist/commands/session-hook.js.map +1 -0
  73. package/dist/commands/session.d.ts +91 -0
  74. package/dist/commands/session.d.ts.map +1 -1
  75. package/dist/commands/session.js +1226 -0
  76. package/dist/commands/session.js.map +1 -1
  77. package/dist/commands/whoami.d.ts +7 -4
  78. package/dist/commands/whoami.d.ts.map +1 -1
  79. package/dist/commands/whoami.js +59 -34
  80. package/dist/commands/whoami.js.map +1 -1
  81. package/dist/config.d.ts.map +1 -1
  82. package/dist/config.js +24 -5
  83. package/dist/config.js.map +1 -1
  84. package/dist/daemon/routes.d.ts.map +1 -1
  85. package/dist/daemon/routes.js +8 -0
  86. package/dist/daemon/routes.js.map +1 -1
  87. package/dist/daemon/server.d.ts.map +1 -1
  88. package/dist/daemon/server.js +88 -0
  89. package/dist/daemon/server.js.map +1 -1
  90. package/dist/governance/impact-analysis.d.ts +27 -0
  91. package/dist/governance/impact-analysis.d.ts.map +1 -0
  92. package/dist/governance/impact-analysis.js +274 -0
  93. package/dist/governance/impact-analysis.js.map +1 -0
  94. package/dist/index.js +472 -29
  95. package/dist/index.js.map +1 -1
  96. package/dist/intent-engine/matcher.d.ts.map +1 -1
  97. package/dist/intent-engine/matcher.js +3 -12
  98. package/dist/intent-engine/matcher.js.map +1 -1
  99. package/dist/utils/admission-artifact.d.ts +59 -0
  100. package/dist/utils/admission-artifact.d.ts.map +1 -0
  101. package/dist/utils/admission-artifact.js +410 -0
  102. package/dist/utils/admission-artifact.js.map +1 -0
  103. package/dist/utils/agent-adapter-setup.d.ts +80 -0
  104. package/dist/utils/agent-adapter-setup.d.ts.map +1 -0
  105. package/dist/utils/agent-adapter-setup.js +577 -0
  106. package/dist/utils/agent-adapter-setup.js.map +1 -0
  107. package/dist/utils/agent-guard-supervisor.d.ts +75 -0
  108. package/dist/utils/agent-guard-supervisor.d.ts.map +1 -0
  109. package/dist/utils/agent-guard-supervisor.js +388 -0
  110. package/dist/utils/agent-guard-supervisor.js.map +1 -0
  111. package/dist/utils/agent-guard.d.ts +92 -0
  112. package/dist/utils/agent-guard.d.ts.map +1 -0
  113. package/dist/utils/agent-guard.js +326 -0
  114. package/dist/utils/agent-guard.js.map +1 -0
  115. package/dist/utils/agent-session-launcher.d.ts +89 -0
  116. package/dist/utils/agent-session-launcher.d.ts.map +1 -0
  117. package/dist/utils/agent-session-launcher.js +308 -0
  118. package/dist/utils/agent-session-launcher.js.map +1 -0
  119. package/dist/utils/bash-command-analysis.d.ts +19 -0
  120. package/dist/utils/bash-command-analysis.d.ts.map +1 -0
  121. package/dist/utils/bash-command-analysis.js +295 -0
  122. package/dist/utils/bash-command-analysis.js.map +1 -0
  123. package/dist/utils/consequence-nudges.d.ts +30 -0
  124. package/dist/utils/consequence-nudges.d.ts.map +1 -0
  125. package/dist/utils/consequence-nudges.js +313 -0
  126. package/dist/utils/consequence-nudges.js.map +1 -0
  127. package/dist/utils/drift-intelligence.d.ts.map +1 -1
  128. package/dist/utils/drift-intelligence.js +29 -7
  129. package/dist/utils/drift-intelligence.js.map +1 -1
  130. package/dist/utils/git-coverage.d.ts +57 -0
  131. package/dist/utils/git-coverage.d.ts.map +1 -0
  132. package/dist/utils/git-coverage.js +302 -0
  133. package/dist/utils/git-coverage.js.map +1 -0
  134. package/dist/utils/gitignore.d.ts.map +1 -1
  135. package/dist/utils/gitignore.js +2 -1
  136. package/dist/utils/gitignore.js.map +1 -1
  137. package/dist/utils/governed-intent.d.ts +10 -0
  138. package/dist/utils/governed-intent.d.ts.map +1 -0
  139. package/dist/utils/governed-intent.js +108 -0
  140. package/dist/utils/governed-intent.js.map +1 -0
  141. package/dist/utils/hook-heartbeat.d.ts +55 -0
  142. package/dist/utils/hook-heartbeat.d.ts.map +1 -0
  143. package/dist/utils/hook-heartbeat.js +116 -0
  144. package/dist/utils/hook-heartbeat.js.map +1 -0
  145. package/dist/utils/intent-continuity.d.ts +21 -0
  146. package/dist/utils/intent-continuity.d.ts.map +1 -0
  147. package/dist/utils/intent-continuity.js +192 -0
  148. package/dist/utils/intent-continuity.js.map +1 -0
  149. package/dist/utils/messages.d.ts +1 -1
  150. package/dist/utils/messages.d.ts.map +1 -1
  151. package/dist/utils/messages.js +24 -21
  152. package/dist/utils/messages.js.map +1 -1
  153. package/dist/utils/runtime-companion.d.ts +137 -0
  154. package/dist/utils/runtime-companion.d.ts.map +1 -0
  155. package/dist/utils/runtime-companion.js +231 -0
  156. package/dist/utils/runtime-companion.js.map +1 -0
  157. package/dist/utils/runtime-connection.d.ts +46 -0
  158. package/dist/utils/runtime-connection.d.ts.map +1 -0
  159. package/dist/utils/runtime-connection.js +148 -0
  160. package/dist/utils/runtime-connection.js.map +1 -0
  161. package/dist/utils/runtime-evidence.d.ts +68 -0
  162. package/dist/utils/runtime-evidence.d.ts.map +1 -0
  163. package/dist/utils/runtime-evidence.js +248 -0
  164. package/dist/utils/runtime-evidence.js.map +1 -0
  165. package/dist/utils/runtime-live.d.ts +33 -0
  166. package/dist/utils/runtime-live.d.ts.map +1 -0
  167. package/dist/utils/runtime-live.js +361 -0
  168. package/dist/utils/runtime-live.js.map +1 -0
  169. package/dist/utils/runtime-outbox.d.ts +76 -0
  170. package/dist/utils/runtime-outbox.d.ts.map +1 -0
  171. package/dist/utils/runtime-outbox.js +410 -0
  172. package/dist/utils/runtime-outbox.js.map +1 -0
  173. package/dist/utils/runtime-receipt.d.ts +50 -0
  174. package/dist/utils/runtime-receipt.d.ts.map +1 -0
  175. package/dist/utils/runtime-receipt.js +223 -0
  176. package/dist/utils/runtime-receipt.js.map +1 -0
  177. package/dist/utils/state.d.ts +21 -0
  178. package/dist/utils/state.d.ts.map +1 -1
  179. package/dist/utils/state.js +30 -0
  180. package/dist/utils/state.js.map +1 -1
  181. package/dist/utils/structural-understanding.d.ts +334 -0
  182. package/dist/utils/structural-understanding.d.ts.map +1 -0
  183. package/dist/utils/structural-understanding.js +2316 -0
  184. package/dist/utils/structural-understanding.js.map +1 -0
  185. package/dist/utils/v0-governance.d.ts +197 -0
  186. package/dist/utils/v0-governance.d.ts.map +1 -0
  187. package/dist/utils/v0-governance.js +904 -0
  188. package/dist/utils/v0-governance.js.map +1 -0
  189. package/package.json +11 -12
@@ -0,0 +1,308 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AGENT_SESSION_HANDSHAKE_SCHEMA_VERSION = exports.AGENT_SESSION_LAUNCH_SCHEMA_VERSION = void 0;
4
+ exports.adapterForLauncherAgent = adapterForLauncherAgent;
5
+ exports.latestAgentLauncherState = latestAgentLauncherState;
6
+ exports.launchAgentSession = launchAgentSession;
7
+ exports.recordLauncherHandshake = recordLauncherHandshake;
8
+ const governance_runtime_1 = require("@neurcode-ai/governance-runtime");
9
+ const v0_governance_1 = require("./v0-governance");
10
+ const runtime_live_1 = require("./runtime-live");
11
+ exports.AGENT_SESSION_LAUNCH_SCHEMA_VERSION = 'neurcode.agent-session-launch.v1';
12
+ exports.AGENT_SESSION_HANDSHAKE_SCHEMA_VERSION = 'neurcode.agent-session-handshake.v1';
13
+ function normalizeAgent(input) {
14
+ const raw = (input || 'claude').trim().toLowerCase();
15
+ if (['claude', 'claude-code', 'claude_code', 'claude-code-hooks'].includes(raw))
16
+ return 'claude';
17
+ if (['copilot', 'github-copilot', 'copilot-hooks'].includes(raw))
18
+ return 'copilot';
19
+ if (['codex', 'codex-mcp'].includes(raw))
20
+ return 'codex';
21
+ if (['cursor', 'cursor-mcp'].includes(raw))
22
+ return 'cursor';
23
+ if (['gemini', 'gemini-cli', 'generic', 'generic-mcp', 'mcp'].includes(raw))
24
+ return raw === 'gemini' || raw === 'gemini-cli' ? 'gemini' : 'generic-mcp';
25
+ if (['vscode', 'vs-code', 'vscode-extension'].includes(raw))
26
+ return 'vscode';
27
+ throw new Error(`Unsupported agent "${input}". Supported agents: claude, copilot, codex, cursor, gemini, generic-mcp, vscode.`);
28
+ }
29
+ function adapterForLauncherAgent(agent) {
30
+ if (agent === 'claude')
31
+ return 'claude-code-hooks';
32
+ if (agent === 'copilot')
33
+ return 'copilot-hooks';
34
+ if (agent === 'codex')
35
+ return 'codex-mcp';
36
+ if (agent === 'cursor')
37
+ return 'cursor-mcp';
38
+ if (agent === 'vscode')
39
+ return 'vscode-extension';
40
+ return 'generic-mcp';
41
+ }
42
+ function handshakeStatusFor(adapter) {
43
+ if (adapter === 'claude-code-hooks')
44
+ return 'awaiting_agent_prompt';
45
+ if (adapter === 'copilot-hooks')
46
+ return 'awaiting_agent_prompt';
47
+ if (adapter === 'vscode-extension')
48
+ return 'observe_only';
49
+ return 'awaiting_plan_capture';
50
+ }
51
+ function eventId(prefix) {
52
+ return `${prefix}_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
53
+ }
54
+ function shellSingleQuote(value) {
55
+ return `'${value.replace(/'/g, `'\\''`)}'`;
56
+ }
57
+ function starterPrompt(input) {
58
+ const base = [
59
+ `Neurcode session: ${input.sessionId}`,
60
+ `Goal: ${input.goal}`,
61
+ '',
62
+ 'Before editing, state a short implementation plan with expected files.',
63
+ 'Stay inside the active Neurcode session and use exact approval paths for approval-required boundaries.',
64
+ ];
65
+ if (input.adapter === 'claude-code-hooks') {
66
+ base.push('Claude Code hooks are installed; Neurcode will check Edit/Write/MultiEdit before the write lands.');
67
+ }
68
+ else if (input.adapter === 'copilot-hooks') {
69
+ base.push('GitHub Copilot hooks are installed; Neurcode will check agent tool use before writes when Copilot hook discovery is active.');
70
+ }
71
+ else if (input.adapter === 'vscode-extension') {
72
+ base.push('VS Code is observe-only; use the CLI/MCP runtime adapter before edits when the agent host supports it.');
73
+ }
74
+ else {
75
+ base.push('Use Neurcode MCP tools before proposed edits: neurcode_agent_session_handshake, neurcode_agent_plan_capture, then neurcode_agent_edit_before for each write.');
76
+ }
77
+ return base.join('\n');
78
+ }
79
+ function instructionsFor(input) {
80
+ if (input.adapter === 'claude-code-hooks') {
81
+ return [
82
+ 'Open Claude Code in this repository.',
83
+ 'Paste the starter prompt shown by this command.',
84
+ 'Claude Code UserPromptSubmit will handshake into the existing session instead of creating a duplicate.',
85
+ 'PreToolUse hooks will hard-deny approval-required writes before they land.',
86
+ ];
87
+ }
88
+ if (input.adapter === 'copilot-hooks') {
89
+ return [
90
+ 'Open VS Code in this repository and use GitHub Copilot Agent Mode.',
91
+ 'Ensure .github/hooks/neurcode.json is present from `neurcode activate copilot`.',
92
+ 'Paste the starter prompt shown by this command.',
93
+ 'Copilot hooks will run UserPromptSubmit, PreToolUse, and Stop through the local runtime where hook discovery is active.',
94
+ ];
95
+ }
96
+ if (input.adapter === 'vscode-extension') {
97
+ return [
98
+ 'Open the Neurcode Runtime Companion sidebar in VS Code.',
99
+ 'Use Refresh Live Runtime to inspect this active session.',
100
+ 'Use MCP/CLI runtime adapter calls for actual agent edit checks; VS Code itself is observe-only.',
101
+ ];
102
+ }
103
+ return [
104
+ 'Give the agent the starter prompt shown by this command.',
105
+ 'The agent should call neurcode_agent_session_handshake, then neurcode_agent_plan_capture with its implementation plan.',
106
+ 'Before every proposed write, the agent should call neurcode_agent_edit_before with the repo-relative file path.',
107
+ 'Cooperative governance is only as strong as the agent host calling the runtime before edits.',
108
+ ];
109
+ }
110
+ function commandForPlanCapture(adapter, goal) {
111
+ const event = {
112
+ schemaVersion: 'neurcode.agent-runtime-event.v1',
113
+ adapter,
114
+ eventType: 'plan.capture',
115
+ payload: {
116
+ plan: {
117
+ summary: `Plan for: ${goal}`,
118
+ steps: ['Replace this with the agent plan before editing.'],
119
+ },
120
+ },
121
+ };
122
+ return `neurcode runtime-adapter event --event-json ${shellSingleQuote(JSON.stringify(event))} --json`;
123
+ }
124
+ function appendLaunchEvent(repoRoot, session, result, launchEventId) {
125
+ const event = {
126
+ type: 'agent_session_launched',
127
+ ts: result.generatedAt,
128
+ message: `Agent session launched for ${result.agent.normalized} (${result.agent.enforcementLevel}).`,
129
+ detail: {
130
+ schemaVersion: exports.AGENT_SESSION_LAUNCH_SCHEMA_VERSION,
131
+ eventId: launchEventId,
132
+ agent: result.agent,
133
+ handshakeStatus: result.handshake.status,
134
+ requiredNextEvent: result.handshake.nextEvent,
135
+ activation: result.activation,
136
+ privacy: result.privacy,
137
+ },
138
+ };
139
+ const updated = (0, governance_runtime_1.appendEvent)(repoRoot, session.sessionId, event);
140
+ return updated ?? session;
141
+ }
142
+ function maybeCaptureInitialPlan(repoRoot, session, planText) {
143
+ if (!planText?.trim())
144
+ return session;
145
+ const plan = (0, governance_runtime_1.extractAgentPlan)({
146
+ plan: planText,
147
+ prompt: session.contract.goal,
148
+ });
149
+ if (!plan)
150
+ return session;
151
+ const result = (0, governance_runtime_1.captureAgentPlan)(repoRoot, session.sessionId, plan);
152
+ return result?.session ?? (0, governance_runtime_1.loadSession)(repoRoot, session.sessionId) ?? session;
153
+ }
154
+ function latestAgentLauncherState(session) {
155
+ const launch = [...session.events].reverse().find((event) => event.type === 'agent_session_launched');
156
+ if (!launch?.detail || typeof launch.detail !== 'object')
157
+ return null;
158
+ const detail = launch.detail;
159
+ const agent = detail.agent && typeof detail.agent === 'object'
160
+ ? detail.agent
161
+ : null;
162
+ if (!agent?.adapter)
163
+ return null;
164
+ const latestHandshake = [...session.events].reverse().find((event) => event.type === 'agent_handshake');
165
+ const handshakeDetail = latestHandshake?.detail && typeof latestHandshake.detail === 'object'
166
+ ? latestHandshake.detail
167
+ : null;
168
+ return {
169
+ agent,
170
+ handshakeStatus: (typeof handshakeDetail?.handshakeStatus === 'string'
171
+ ? handshakeDetail.handshakeStatus
172
+ : detail.handshakeStatus),
173
+ launchedAt: launch.ts,
174
+ promptSeenAt: latestHandshake?.ts,
175
+ launchEventId: typeof detail.eventId === 'string' ? detail.eventId : undefined,
176
+ };
177
+ }
178
+ async function launchAgentSession(options) {
179
+ const goal = options.goal.trim();
180
+ if (!goal)
181
+ throw new Error('--goal is required');
182
+ const repoRoot = (0, v0_governance_1.resolveRepoRoot)(options.dir || process.cwd());
183
+ const normalized = normalizeAgent(options.agent);
184
+ const adapter = adapterForLauncherAgent(normalized);
185
+ const capability = (0, governance_runtime_1.getAgentRuntimeAdapterCapability)(adapter);
186
+ const generatedAt = new Date().toISOString();
187
+ const profileResult = (0, v0_governance_1.ensureFreshGovernanceProfile)(repoRoot, { force: options.forceProfile === true });
188
+ const profileFreshness = (0, v0_governance_1.buildProfileFreshnessSignal)(profileResult, profileResult.refreshed ? 'auto_refreshed' : 'none');
189
+ let activation = {
190
+ attempted: false,
191
+ };
192
+ if (normalized === 'claude' && options.activate !== false) {
193
+ (0, v0_governance_1.installClaudeGovernanceHooks)(repoRoot, { force: options.forceProfile === true });
194
+ (0, v0_governance_1.installClaudeMcpConfig)({ force: options.forceProfile === true });
195
+ activation = {
196
+ attempted: true,
197
+ hooksInstalled: true,
198
+ mcpConfigured: true,
199
+ };
200
+ }
201
+ if (normalized === 'copilot' && options.activate !== false) {
202
+ (0, v0_governance_1.installCopilotGovernanceHooks)(repoRoot, { force: options.forceProfile === true });
203
+ activation = {
204
+ attempted: true,
205
+ hooksInstalled: true,
206
+ mcpConfigured: false,
207
+ };
208
+ }
209
+ let session = (0, governance_runtime_1.createSession)(repoRoot, profileResult.profile, goal);
210
+ session = maybeCaptureInitialPlan(repoRoot, session, options.plan);
211
+ const status = handshakeStatusFor(adapter);
212
+ const sessionId = session.sessionId;
213
+ const launchEventId = eventId('launch');
214
+ const agent = {
215
+ requested: options.agent || 'claude',
216
+ normalized,
217
+ adapter,
218
+ enforcementLevel: capability.enforcementLevel,
219
+ compatibilityMode: capability.compatibilityMode,
220
+ automatic: capability.automatic,
221
+ hardDeny: capability.enforcementLevel === 'hard_deny',
222
+ enforceable: capability.enforceable,
223
+ advisoryOnly: capability.advisoryOnly,
224
+ supervisorSupported: capability.supervisorSupported,
225
+ description: capability.description,
226
+ };
227
+ const handoffPrompt = starterPrompt({ sessionId, goal, adapter });
228
+ const resultWithoutSession = {
229
+ schemaVersion: exports.AGENT_SESSION_LAUNCH_SCHEMA_VERSION,
230
+ ok: true,
231
+ generatedAt,
232
+ repoRoot,
233
+ privacy: {
234
+ metadataOnly: true,
235
+ sourceUploaded: false,
236
+ sourceIncluded: false,
237
+ },
238
+ profile: {
239
+ status: profileResult.status,
240
+ refreshed: profileResult.refreshed,
241
+ profileHash: profileResult.profile.profileHash,
242
+ topologyHash: profileResult.profile.topology.hash,
243
+ trackedFileCount: profileResult.profile.topology.trackedFileCount,
244
+ reasons: [...profileResult.reasons],
245
+ },
246
+ agent,
247
+ activation,
248
+ handshake: {
249
+ status,
250
+ required: status !== 'observe_only',
251
+ nextEvent: status === 'awaiting_agent_prompt'
252
+ ? (adapter === 'copilot-hooks' ? 'Copilot UserPromptSubmit' : 'Claude Code UserPromptSubmit')
253
+ : status === 'awaiting_plan_capture'
254
+ ? 'plan.capture'
255
+ : null,
256
+ starterPrompt: handoffPrompt,
257
+ instructions: instructionsFor({ agent: normalized, adapter, sessionId, goal }),
258
+ },
259
+ commands: {
260
+ status: `neurcode session status --local --session-id ${sessionId}`,
261
+ approve: `neurcode session approve --session-id ${sessionId} --path <exact-path> --reason "<reason>"`,
262
+ finish: `neurcode session end --session-id ${sessionId}`,
263
+ capturePlan: commandForPlanCapture(adapter, goal),
264
+ },
265
+ };
266
+ session = appendLaunchEvent(repoRoot, session, resultWithoutSession, launchEventId);
267
+ await (0, runtime_live_1.publishRuntimeLiveStatus)(repoRoot, session, { profileFreshness });
268
+ return {
269
+ ...resultWithoutSession,
270
+ session: {
271
+ sessionId,
272
+ goal,
273
+ scopeMode: session.contract.scopeMode,
274
+ allowedGlobs: [...session.contract.allowedGlobs],
275
+ approvalRequiredGlobs: [...session.contract.approvalRequiredGlobs],
276
+ planRevision: typeof session.contract.agentPlanRevision === 'number'
277
+ ? session.contract.agentPlanRevision
278
+ : session.contract.agentPlan
279
+ ? 1
280
+ : null,
281
+ },
282
+ };
283
+ }
284
+ function recordLauncherHandshake(repoRoot, session, input) {
285
+ const state = latestAgentLauncherState(session);
286
+ const now = new Date().toISOString();
287
+ const updated = (0, governance_runtime_1.appendEvent)(repoRoot, session.sessionId, {
288
+ type: 'agent_handshake',
289
+ ts: now,
290
+ message: input.message || `Agent handshake recorded (${input.handshakeStatus}).`,
291
+ detail: {
292
+ schemaVersion: exports.AGENT_SESSION_HANDSHAKE_SCHEMA_VERSION,
293
+ eventId: eventId('handshake'),
294
+ agent: state?.agent ?? null,
295
+ launchEventId: state?.launchEventId ?? null,
296
+ handshakeStatus: input.handshakeStatus,
297
+ promptMatched: input.promptMatched || 'manual',
298
+ source: input.source || 'local_cli',
299
+ privacy: {
300
+ metadataOnly: true,
301
+ sourceUploaded: false,
302
+ sourceIncluded: false,
303
+ },
304
+ },
305
+ });
306
+ return updated ?? session;
307
+ }
308
+ //# sourceMappingURL=agent-session-launcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-session-launcher.js","sourceRoot":"","sources":["../../src/utils/agent-session-launcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export type BashMutationOperation = 'redirect' | 'rm' | 'mv' | 'cp' | 'touch' | 'mkdir' | 'tee' | 'sed_in_place' | 'git_restore' | 'git_checkout_path' | 'runtime_write' | 'unknown_mutation';
2
+ export interface BashCommandAnalysis {
3
+ mutates: boolean;
4
+ suspicious: boolean;
5
+ readOnly: boolean;
6
+ /**
7
+ * True when the command is an operator diagnostic/readback command and should
8
+ * not be counted as a governed code edit in session evidence. This includes
9
+ * plain read-only commands and read-only commands whose stdout/stderr is
10
+ * redirected outside the repository for inspection.
11
+ */
12
+ operatorDiagnostic: boolean;
13
+ operation: BashMutationOperation | 'read_only' | 'unclassified';
14
+ targetPaths: string[];
15
+ commandFingerprint: string;
16
+ commandPreview: string;
17
+ }
18
+ export declare function analyzeBashCommand(command: string): BashCommandAnalysis;
19
+ //# sourceMappingURL=bash-command-analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash-command-analysis.d.ts","sourceRoot":"","sources":["../../src/utils/bash-command-analysis.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,qBAAqB,GAC7B,UAAU,GACV,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,OAAO,GACP,OAAO,GACP,KAAK,GACL,cAAc,GACd,aAAa,GACb,mBAAmB,GACnB,eAAe,GACf,kBAAkB,CAAC;AAEvB,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAC5B,SAAS,EAAE,qBAAqB,GAAG,WAAW,GAAG,cAAc,CAAC;IAChE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB;AAoQD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAmCvE"}
@@ -0,0 +1,295 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.analyzeBashCommand = analyzeBashCommand;
4
+ const crypto_1 = require("crypto");
5
+ const PATH_ROOTS = new Set([
6
+ 'app',
7
+ 'apps',
8
+ 'bin',
9
+ 'cmd',
10
+ 'config',
11
+ 'docs',
12
+ 'fixtures',
13
+ 'lib',
14
+ 'migrations',
15
+ 'packages',
16
+ 'scripts',
17
+ 'services',
18
+ 'src',
19
+ 'test',
20
+ 'tests',
21
+ 'web',
22
+ '.github',
23
+ ]);
24
+ const READ_ONLY_PREFIX = /^\s*(?:ls|cat|grep|rg|find|pwd|git\s+(?:status|diff|log|show|branch|rev-parse|ls-files)|sed(?!\s+-i\b)|awk|head|tail|wc|sort|uniq|jq)\b/;
25
+ const NEURCODE_DIAGNOSTIC_RE = /^\s*(?:node\s+)?(?:packages\/cli\/dist\/index\.js|neurcode)\s+(?:(?:--version|-v)|doctor\b|status\b|session\s+(?:status|obligations)\b|runtime-sync\s+status\b|admission\b|session-hook\b[^;&|]*\b(?:start|check|finish)\b)/;
26
+ function unique(values) {
27
+ return Array.from(new Set(values.filter(Boolean)));
28
+ }
29
+ function stripQuotes(value) {
30
+ return value
31
+ .replace(/^[`"'(<\[]+/, '')
32
+ .replace(/[`"')>\].,;:]+$/, '')
33
+ .trim();
34
+ }
35
+ function normalizeCandidate(raw) {
36
+ const value = stripQuotes(raw).replace(/\\/g, '/').replace(/^\.\//, '').replace(/^\//, '');
37
+ if (!value || value.includes('://') || /\s/.test(value))
38
+ return null;
39
+ const parts = value.split('/').filter(Boolean);
40
+ if (parts.length < 2)
41
+ return null;
42
+ if (!PATH_ROOTS.has(parts[0]))
43
+ return null;
44
+ return value;
45
+ }
46
+ function pathCandidates(text) {
47
+ const out = [];
48
+ const tokenRe = /(?:"([^"]+)"|'([^']+)'|`([^`]+)`|([A-Za-z0-9_.@~/-]+\/[A-Za-z0-9_.@~/-]+))/g;
49
+ let match;
50
+ while ((match = tokenRe.exec(text)) !== null) {
51
+ const candidate = normalizeCandidate(match[1] || match[2] || match[3] || match[4] || '');
52
+ if (candidate)
53
+ out.push(candidate);
54
+ }
55
+ return unique(out);
56
+ }
57
+ function stripQuotedContent(command) {
58
+ let out = '';
59
+ let quote = null;
60
+ for (let i = 0; i < command.length; i += 1) {
61
+ const ch = command[i];
62
+ if (quote) {
63
+ if (ch === '\\' && quote !== "'" && i + 1 < command.length) {
64
+ out += ' ';
65
+ i += 1;
66
+ out += ' ';
67
+ continue;
68
+ }
69
+ if (ch === quote) {
70
+ quote = null;
71
+ out += ch;
72
+ }
73
+ else {
74
+ out += ' ';
75
+ }
76
+ continue;
77
+ }
78
+ if (ch === '"' || ch === "'" || ch === '`') {
79
+ quote = ch;
80
+ out += ch;
81
+ continue;
82
+ }
83
+ out += ch;
84
+ }
85
+ return out;
86
+ }
87
+ function splitCommandSegments(command) {
88
+ const segments = [];
89
+ let current = '';
90
+ let quote = null;
91
+ for (let i = 0; i < command.length; i += 1) {
92
+ const ch = command[i];
93
+ if (quote) {
94
+ current += ch;
95
+ if (ch === '\\' && quote !== "'" && i + 1 < command.length) {
96
+ i += 1;
97
+ current += command[i];
98
+ continue;
99
+ }
100
+ if (ch === quote)
101
+ quote = null;
102
+ continue;
103
+ }
104
+ if (ch === '"' || ch === "'" || ch === '`') {
105
+ quote = ch;
106
+ current += ch;
107
+ continue;
108
+ }
109
+ if (ch === ';' || ch === '\n' || ch === '|') {
110
+ if (current.trim())
111
+ segments.push(current.trim());
112
+ current = '';
113
+ if ((ch === '|' && command[i + 1] === '|'))
114
+ i += 1;
115
+ continue;
116
+ }
117
+ if (ch === '&') {
118
+ if (current.trim())
119
+ segments.push(current.trim());
120
+ current = '';
121
+ while (command[i + 1] === '&')
122
+ i += 1;
123
+ continue;
124
+ }
125
+ current += ch;
126
+ }
127
+ if (current.trim())
128
+ segments.push(current.trim());
129
+ return segments;
130
+ }
131
+ function shellWords(segment) {
132
+ const words = [];
133
+ const tokenRe = /"([^"]*)"|'([^']*)'|`([^`]*)`|([^\s]+)/g;
134
+ let match;
135
+ while ((match = tokenRe.exec(segment)) !== null) {
136
+ words.push(match[1] || match[2] || match[3] || match[4] || '');
137
+ }
138
+ return words;
139
+ }
140
+ function commandFingerprint(command) {
141
+ return (0, crypto_1.createHash)('sha256').update(command).digest('hex').slice(0, 16);
142
+ }
143
+ function commandPreview(command) {
144
+ return command
145
+ .replace(/(['"]?)(?:[A-Za-z_][A-Za-z0-9_]*=)?(?:sk|pk|nk)_(?:live|test)_[A-Za-z0-9_-]+/g, '$1[redacted-key]')
146
+ .replace(/(password|secret|token|api[_-]?key)=\S+/gi, '$1=[redacted]')
147
+ .replace(/\s+/g, ' ')
148
+ .trim()
149
+ .slice(0, 160);
150
+ }
151
+ function operationFor(command) {
152
+ const trimmed = command.trim();
153
+ if (/\b(open|writeFile|writeFileSync|appendFile|appendFileSync|unlink|rmSync|renameSync)\s*\(/.test(trimmed)) {
154
+ return 'runtime_write';
155
+ }
156
+ const syntax = stripQuotedContent(trimmed);
157
+ if (/(?:^|[\s;&|])rm\s+/.test(syntax))
158
+ return 'rm';
159
+ if (/(?:^|[\s;&|])mv\s+/.test(syntax))
160
+ return 'mv';
161
+ if (/(?:^|[\s;&|])cp\s+/.test(syntax))
162
+ return 'cp';
163
+ if (/(?:^|[\s;&|])touch\s+/.test(syntax))
164
+ return 'touch';
165
+ if (/(?:^|[\s;&|])mkdir\s+/.test(syntax))
166
+ return 'mkdir';
167
+ if (/(?:^|[\s;&|])tee\s+/.test(syntax))
168
+ return 'tee';
169
+ if (/(?:^|[\s;&|])sed\s+[^;&|]*\s-i\b|\bsed\s+-i\b/.test(syntax))
170
+ return 'sed_in_place';
171
+ if (/(?:^|[\s;&|])git\s+restore(?:\s+|$)/.test(syntax))
172
+ return 'git_restore';
173
+ if (/(?:^|[\s;&|])git\s+checkout\s+[^;&|]*--\s+/.test(syntax))
174
+ return 'git_checkout_path';
175
+ if (/>|>>|2>|&>/.test(syntax))
176
+ return 'redirect';
177
+ return 'unknown_mutation';
178
+ }
179
+ function isReadOnlyDiagnosticCommand(command) {
180
+ const syntax = stripQuotedContent(command).trim();
181
+ if (!syntax)
182
+ return true;
183
+ if (READ_ONLY_PREFIX.test(syntax))
184
+ return true;
185
+ if (NEURCODE_DIAGNOSTIC_RE.test(syntax))
186
+ return true;
187
+ if (/^\s*node\s+-e\s+/.test(syntax) && /console\.log|require\.resolve|process\.versions|process\.cwd/.test(command)) {
188
+ return true;
189
+ }
190
+ return false;
191
+ }
192
+ function isOperatorDiagnosticCapture(command, operation, targets) {
193
+ if (targets.length > 0)
194
+ return false;
195
+ if (operation !== 'redirect' && operation !== 'tee')
196
+ return false;
197
+ return splitCommandSegments(command).some(isReadOnlyDiagnosticCommand);
198
+ }
199
+ function redirectionTargets(command) {
200
+ const out = [];
201
+ const re = /(?:^|[^0-9])(?:>|>>|2>|&>)\s*("?[^"\s;&|]+"?|'[^'\s;&|]+')/g;
202
+ let match;
203
+ while ((match = re.exec(command)) !== null) {
204
+ const candidate = normalizeCandidate(match[1]);
205
+ if (candidate)
206
+ out.push(candidate);
207
+ }
208
+ return out;
209
+ }
210
+ function runtimeWriteTargets(command) {
211
+ const out = [];
212
+ const writeApi = /\b(?:open|writeFile|writeFileSync|appendFile|appendFileSync|unlink|rmSync|renameSync)\s*\(\s*("([^"]+)"|'([^']+)'|`([^`]+)`)/g;
213
+ let match;
214
+ while ((match = writeApi.exec(command)) !== null) {
215
+ const candidate = normalizeCandidate(match[2] || match[3] || match[4] || '');
216
+ if (candidate)
217
+ out.push(candidate);
218
+ }
219
+ return unique(out);
220
+ }
221
+ function segmentForOperation(command, operation) {
222
+ for (const segment of splitCommandSegments(command)) {
223
+ if (operationFor(segment) === operation)
224
+ return segment;
225
+ }
226
+ return command;
227
+ }
228
+ function commandArgumentTargets(command, operation) {
229
+ const segment = segmentForOperation(command, operation);
230
+ const words = shellWords(segment);
231
+ const commandIndex = words.findIndex((word) => word === operation || (operation === 'sed_in_place' && word === 'sed') || ((operation === 'git_restore' || operation === 'git_checkout_path') && word === 'git'));
232
+ if (commandIndex < 0)
233
+ return pathCandidates(segment);
234
+ if (operation === 'git_restore' || operation === 'git_checkout_path') {
235
+ const marker = words.lastIndexOf('--');
236
+ const args = marker >= 0 ? words.slice(marker + 1) : words.slice(commandIndex + 2);
237
+ return unique(args.map((arg) => normalizeCandidate(arg)).filter((value) => Boolean(value)));
238
+ }
239
+ const args = words
240
+ .slice(commandIndex + 1)
241
+ .filter((arg) => arg !== '--' && !arg.startsWith('-'));
242
+ return unique(args.map((arg) => normalizeCandidate(arg)).filter((value) => Boolean(value)));
243
+ }
244
+ function targetPathsForOperation(command, operation) {
245
+ if (operation === 'redirect')
246
+ return redirectionTargets(command);
247
+ if (operation === 'runtime_write')
248
+ return runtimeWriteTargets(command);
249
+ if (operation === 'rm' ||
250
+ operation === 'mv' ||
251
+ operation === 'cp' ||
252
+ operation === 'touch' ||
253
+ operation === 'mkdir' ||
254
+ operation === 'tee' ||
255
+ operation === 'sed_in_place' ||
256
+ operation === 'git_restore' ||
257
+ operation === 'git_checkout_path') {
258
+ return commandArgumentTargets(command, operation);
259
+ }
260
+ return [];
261
+ }
262
+ function analyzeBashCommand(command) {
263
+ const trimmed = command.trim();
264
+ const fingerprint = commandFingerprint(command);
265
+ const preview = commandPreview(command);
266
+ if (!trimmed) {
267
+ return {
268
+ mutates: false,
269
+ suspicious: false,
270
+ readOnly: true,
271
+ operatorDiagnostic: true,
272
+ operation: 'read_only',
273
+ targetPaths: [],
274
+ commandFingerprint: fingerprint,
275
+ commandPreview: preview,
276
+ };
277
+ }
278
+ const operation = operationFor(trimmed);
279
+ const mutates = operation !== 'unknown_mutation';
280
+ const targets = mutates ? targetPathsForOperation(trimmed, operation) : [];
281
+ const readOnly = !mutates && isReadOnlyDiagnosticCommand(trimmed);
282
+ const operatorDiagnostic = (!mutates && (readOnly || targets.length === 0)) ||
283
+ isOperatorDiagnosticCapture(trimmed, operation, targets);
284
+ return {
285
+ mutates,
286
+ suspicious: mutates && targets.length === 0 && !operatorDiagnostic,
287
+ readOnly: readOnly || (!mutates && targets.length === 0),
288
+ operatorDiagnostic,
289
+ operation: mutates ? operation : 'read_only',
290
+ targetPaths: targets,
291
+ commandFingerprint: fingerprint,
292
+ commandPreview: preview,
293
+ };
294
+ }
295
+ //# sourceMappingURL=bash-command-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash-command-analysis.js","sourceRoot":"","sources":["../../src/utils/bash-command-analysis.ts"],"names":[],"mappings":"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"}