@neurcode-ai/cli 0.12.0 → 0.15.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 (212) hide show
  1. package/README.md +60 -8
  2. package/dist/api-client.d.ts +284 -0
  3. package/dist/api-client.d.ts.map +1 -1
  4. package/dist/api-client.js +111 -0
  5. package/dist/api-client.js.map +1 -1
  6. package/dist/commands/activate.d.ts +82 -0
  7. package/dist/commands/activate.d.ts.map +1 -0
  8. package/dist/commands/activate.js +551 -0
  9. package/dist/commands/activate.js.map +1 -0
  10. package/dist/commands/admission.d.ts +67 -0
  11. package/dist/commands/admission.d.ts.map +1 -0
  12. package/dist/commands/admission.js +350 -0
  13. package/dist/commands/admission.js.map +1 -0
  14. package/dist/commands/agent.d.ts +3 -0
  15. package/dist/commands/agent.d.ts.map +1 -0
  16. package/dist/commands/agent.js +2045 -0
  17. package/dist/commands/agent.js.map +1 -0
  18. package/dist/commands/demo.d.ts +3 -0
  19. package/dist/commands/demo.d.ts.map +1 -0
  20. package/dist/commands/demo.js +102 -0
  21. package/dist/commands/demo.js.map +1 -0
  22. package/dist/commands/governance.d.ts.map +1 -1
  23. package/dist/commands/governance.js +12 -0
  24. package/dist/commands/governance.js.map +1 -1
  25. package/dist/commands/home.d.ts +21 -0
  26. package/dist/commands/home.d.ts.map +1 -0
  27. package/dist/commands/home.js +253 -0
  28. package/dist/commands/home.js.map +1 -0
  29. package/dist/commands/init.d.ts.map +1 -1
  30. package/dist/commands/init.js +58 -44
  31. package/dist/commands/init.js.map +1 -1
  32. package/dist/commands/login.d.ts +1 -1
  33. package/dist/commands/login.d.ts.map +1 -1
  34. package/dist/commands/login.js +44 -22
  35. package/dist/commands/login.js.map +1 -1
  36. package/dist/commands/profile.d.ts +14 -0
  37. package/dist/commands/profile.d.ts.map +1 -0
  38. package/dist/commands/profile.js +118 -0
  39. package/dist/commands/profile.js.map +1 -0
  40. package/dist/commands/quickstart.d.ts +2 -2
  41. package/dist/commands/quickstart.d.ts.map +1 -1
  42. package/dist/commands/quickstart.js +33 -30
  43. package/dist/commands/quickstart.js.map +1 -1
  44. package/dist/commands/remediate-export.d.ts +6 -1
  45. package/dist/commands/remediate-export.d.ts.map +1 -1
  46. package/dist/commands/remediate-export.js +375 -8
  47. package/dist/commands/remediate-export.js.map +1 -1
  48. package/dist/commands/replay.d.ts.map +1 -1
  49. package/dist/commands/replay.js +84 -0
  50. package/dist/commands/replay.js.map +1 -1
  51. package/dist/commands/run.d.ts +3 -0
  52. package/dist/commands/run.d.ts.map +1 -0
  53. package/dist/commands/run.js +98 -0
  54. package/dist/commands/run.js.map +1 -0
  55. package/dist/commands/runtime-adapter.d.ts +8 -0
  56. package/dist/commands/runtime-adapter.d.ts.map +1 -0
  57. package/dist/commands/runtime-adapter.js +375 -0
  58. package/dist/commands/runtime-adapter.js.map +1 -0
  59. package/dist/commands/runtime-doctor.d.ts +6 -0
  60. package/dist/commands/runtime-doctor.d.ts.map +1 -0
  61. package/dist/commands/runtime-doctor.js +478 -0
  62. package/dist/commands/runtime-doctor.js.map +1 -0
  63. package/dist/commands/runtime-report.d.ts +13 -0
  64. package/dist/commands/runtime-report.d.ts.map +1 -0
  65. package/dist/commands/runtime-report.js +81 -0
  66. package/dist/commands/runtime-report.js.map +1 -0
  67. package/dist/commands/runtime-sync.d.ts +17 -0
  68. package/dist/commands/runtime-sync.d.ts.map +1 -0
  69. package/dist/commands/runtime-sync.js +656 -0
  70. package/dist/commands/runtime-sync.js.map +1 -0
  71. package/dist/commands/runtime.d.ts +16 -0
  72. package/dist/commands/runtime.d.ts.map +1 -0
  73. package/dist/commands/runtime.js +380 -0
  74. package/dist/commands/runtime.js.map +1 -0
  75. package/dist/commands/session-hook.d.ts +35 -0
  76. package/dist/commands/session-hook.d.ts.map +1 -0
  77. package/dist/commands/session-hook.js +1297 -0
  78. package/dist/commands/session-hook.js.map +1 -0
  79. package/dist/commands/session.d.ts +91 -0
  80. package/dist/commands/session.d.ts.map +1 -1
  81. package/dist/commands/session.js +1226 -0
  82. package/dist/commands/session.js.map +1 -1
  83. package/dist/commands/verify-output.d.ts.map +1 -1
  84. package/dist/commands/verify-output.js +22 -0
  85. package/dist/commands/verify-output.js.map +1 -1
  86. package/dist/commands/verify.d.ts.map +1 -1
  87. package/dist/commands/verify.js +21 -3
  88. package/dist/commands/verify.js.map +1 -1
  89. package/dist/commands/whoami.d.ts +7 -4
  90. package/dist/commands/whoami.d.ts.map +1 -1
  91. package/dist/commands/whoami.js +59 -34
  92. package/dist/commands/whoami.js.map +1 -1
  93. package/dist/config.d.ts.map +1 -1
  94. package/dist/config.js +24 -5
  95. package/dist/config.js.map +1 -1
  96. package/dist/daemon/routes.d.ts.map +1 -1
  97. package/dist/daemon/routes.js +8 -0
  98. package/dist/daemon/routes.js.map +1 -1
  99. package/dist/daemon/server.d.ts.map +1 -1
  100. package/dist/daemon/server.js +88 -0
  101. package/dist/daemon/server.js.map +1 -1
  102. package/dist/governance/canonical-pipeline.d.ts.map +1 -1
  103. package/dist/governance/canonical-pipeline.js +29 -3
  104. package/dist/governance/canonical-pipeline.js.map +1 -1
  105. package/dist/governance/impact-analysis.d.ts +27 -0
  106. package/dist/governance/impact-analysis.d.ts.map +1 -0
  107. package/dist/governance/impact-analysis.js +274 -0
  108. package/dist/governance/impact-analysis.js.map +1 -0
  109. package/dist/index.js +484 -29
  110. package/dist/index.js.map +1 -1
  111. package/dist/intent-engine/matcher.d.ts.map +1 -1
  112. package/dist/intent-engine/matcher.js +3 -12
  113. package/dist/intent-engine/matcher.js.map +1 -1
  114. package/dist/utils/admission-artifact.d.ts +59 -0
  115. package/dist/utils/admission-artifact.d.ts.map +1 -0
  116. package/dist/utils/admission-artifact.js +410 -0
  117. package/dist/utils/admission-artifact.js.map +1 -0
  118. package/dist/utils/agent-adapter-setup.d.ts +80 -0
  119. package/dist/utils/agent-adapter-setup.d.ts.map +1 -0
  120. package/dist/utils/agent-adapter-setup.js +577 -0
  121. package/dist/utils/agent-adapter-setup.js.map +1 -0
  122. package/dist/utils/agent-guard-supervisor.d.ts +75 -0
  123. package/dist/utils/agent-guard-supervisor.d.ts.map +1 -0
  124. package/dist/utils/agent-guard-supervisor.js +388 -0
  125. package/dist/utils/agent-guard-supervisor.js.map +1 -0
  126. package/dist/utils/agent-guard.d.ts +92 -0
  127. package/dist/utils/agent-guard.d.ts.map +1 -0
  128. package/dist/utils/agent-guard.js +326 -0
  129. package/dist/utils/agent-guard.js.map +1 -0
  130. package/dist/utils/agent-session-launcher.d.ts +89 -0
  131. package/dist/utils/agent-session-launcher.d.ts.map +1 -0
  132. package/dist/utils/agent-session-launcher.js +308 -0
  133. package/dist/utils/agent-session-launcher.js.map +1 -0
  134. package/dist/utils/bash-command-analysis.d.ts +19 -0
  135. package/dist/utils/bash-command-analysis.d.ts.map +1 -0
  136. package/dist/utils/bash-command-analysis.js +295 -0
  137. package/dist/utils/bash-command-analysis.js.map +1 -0
  138. package/dist/utils/consequence-nudges.d.ts +30 -0
  139. package/dist/utils/consequence-nudges.d.ts.map +1 -0
  140. package/dist/utils/consequence-nudges.js +313 -0
  141. package/dist/utils/consequence-nudges.js.map +1 -0
  142. package/dist/utils/drift-intelligence.d.ts.map +1 -1
  143. package/dist/utils/drift-intelligence.js +29 -7
  144. package/dist/utils/drift-intelligence.js.map +1 -1
  145. package/dist/utils/git-coverage.d.ts +57 -0
  146. package/dist/utils/git-coverage.d.ts.map +1 -0
  147. package/dist/utils/git-coverage.js +302 -0
  148. package/dist/utils/git-coverage.js.map +1 -0
  149. package/dist/utils/gitignore.d.ts.map +1 -1
  150. package/dist/utils/gitignore.js +2 -1
  151. package/dist/utils/gitignore.js.map +1 -1
  152. package/dist/utils/governed-intent.d.ts +10 -0
  153. package/dist/utils/governed-intent.d.ts.map +1 -0
  154. package/dist/utils/governed-intent.js +108 -0
  155. package/dist/utils/governed-intent.js.map +1 -0
  156. package/dist/utils/hook-heartbeat.d.ts +55 -0
  157. package/dist/utils/hook-heartbeat.d.ts.map +1 -0
  158. package/dist/utils/hook-heartbeat.js +116 -0
  159. package/dist/utils/hook-heartbeat.js.map +1 -0
  160. package/dist/utils/intent-continuity.d.ts +21 -0
  161. package/dist/utils/intent-continuity.d.ts.map +1 -0
  162. package/dist/utils/intent-continuity.js +192 -0
  163. package/dist/utils/intent-continuity.js.map +1 -0
  164. package/dist/utils/messages.d.ts +1 -1
  165. package/dist/utils/messages.d.ts.map +1 -1
  166. package/dist/utils/messages.js +35 -23
  167. package/dist/utils/messages.js.map +1 -1
  168. package/dist/utils/runtime-companion.d.ts +137 -0
  169. package/dist/utils/runtime-companion.d.ts.map +1 -0
  170. package/dist/utils/runtime-companion.js +231 -0
  171. package/dist/utils/runtime-companion.js.map +1 -0
  172. package/dist/utils/runtime-connection.d.ts +46 -0
  173. package/dist/utils/runtime-connection.d.ts.map +1 -0
  174. package/dist/utils/runtime-connection.js +148 -0
  175. package/dist/utils/runtime-connection.js.map +1 -0
  176. package/dist/utils/runtime-evidence.d.ts +68 -0
  177. package/dist/utils/runtime-evidence.d.ts.map +1 -0
  178. package/dist/utils/runtime-evidence.js +248 -0
  179. package/dist/utils/runtime-evidence.js.map +1 -0
  180. package/dist/utils/runtime-live.d.ts +33 -0
  181. package/dist/utils/runtime-live.d.ts.map +1 -0
  182. package/dist/utils/runtime-live.js +361 -0
  183. package/dist/utils/runtime-live.js.map +1 -0
  184. package/dist/utils/runtime-outbox.d.ts +76 -0
  185. package/dist/utils/runtime-outbox.d.ts.map +1 -0
  186. package/dist/utils/runtime-outbox.js +410 -0
  187. package/dist/utils/runtime-outbox.js.map +1 -0
  188. package/dist/utils/runtime-receipt.d.ts +50 -0
  189. package/dist/utils/runtime-receipt.d.ts.map +1 -0
  190. package/dist/utils/runtime-receipt.js +223 -0
  191. package/dist/utils/runtime-receipt.js.map +1 -0
  192. package/dist/utils/runtime-state.d.ts +44 -0
  193. package/dist/utils/runtime-state.d.ts.map +1 -0
  194. package/dist/utils/runtime-state.js +151 -0
  195. package/dist/utils/runtime-state.js.map +1 -0
  196. package/dist/utils/state.d.ts +21 -0
  197. package/dist/utils/state.d.ts.map +1 -1
  198. package/dist/utils/state.js +30 -0
  199. package/dist/utils/state.js.map +1 -1
  200. package/dist/utils/structural-understanding.d.ts +334 -0
  201. package/dist/utils/structural-understanding.d.ts.map +1 -0
  202. package/dist/utils/structural-understanding.js +2316 -0
  203. package/dist/utils/structural-understanding.js.map +1 -0
  204. package/dist/utils/v0-governance.d.ts +197 -0
  205. package/dist/utils/v0-governance.d.ts.map +1 -0
  206. package/dist/utils/v0-governance.js +904 -0
  207. package/dist/utils/v0-governance.js.map +1 -0
  208. package/package.json +6 -6
  209. package/dist/utils/box.d.ts +0 -16
  210. package/dist/utils/box.d.ts.map +0 -1
  211. package/dist/utils/box.js +0 -85
  212. package/dist/utils/box.js.map +0 -1
@@ -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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"}