instar 0.28.75 → 0.28.76

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 (316) hide show
  1. package/dist/cli.js +4 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/discovery.d.ts.map +1 -1
  4. package/dist/commands/discovery.js +1 -0
  5. package/dist/commands/discovery.js.map +1 -1
  6. package/dist/commands/init.d.ts.map +1 -1
  7. package/dist/commands/init.js +2 -0
  8. package/dist/commands/init.js.map +1 -1
  9. package/dist/commands/job.d.ts.map +1 -1
  10. package/dist/commands/job.js +1 -0
  11. package/dist/commands/job.js.map +1 -1
  12. package/dist/commands/ledgerCleanup.d.ts.map +1 -1
  13. package/dist/commands/ledgerCleanup.js +1 -0
  14. package/dist/commands/ledgerCleanup.js.map +1 -1
  15. package/dist/commands/listener.d.ts.map +1 -1
  16. package/dist/commands/listener.js +6 -0
  17. package/dist/commands/listener.js.map +1 -1
  18. package/dist/commands/nuke.d.ts.map +1 -1
  19. package/dist/commands/nuke.js +6 -0
  20. package/dist/commands/nuke.js.map +1 -1
  21. package/dist/commands/server.d.ts.map +1 -1
  22. package/dist/commands/server.js +2 -0
  23. package/dist/commands/server.js.map +1 -1
  24. package/dist/commands/setup.d.ts.map +1 -1
  25. package/dist/commands/setup.js +6 -0
  26. package/dist/commands/setup.js.map +1 -1
  27. package/dist/commands/slack-cli.d.ts.map +1 -1
  28. package/dist/commands/slack-cli.js +4 -0
  29. package/dist/commands/slack-cli.js.map +1 -1
  30. package/dist/commands/whatsapp.d.ts.map +1 -1
  31. package/dist/commands/whatsapp.js +1 -0
  32. package/dist/commands/whatsapp.js.map +1 -1
  33. package/dist/commands/worktree.d.ts.map +1 -1
  34. package/dist/commands/worktree.js +1 -0
  35. package/dist/commands/worktree.js.map +1 -1
  36. package/dist/core/AgentConnector.d.ts.map +1 -1
  37. package/dist/core/AgentConnector.js +3 -0
  38. package/dist/core/AgentConnector.js.map +1 -1
  39. package/dist/core/AgentRegistry.d.ts.map +1 -1
  40. package/dist/core/AgentRegistry.js +2 -0
  41. package/dist/core/AgentRegistry.js.map +1 -1
  42. package/dist/core/AutoDispatcher.d.ts.map +1 -1
  43. package/dist/core/AutoDispatcher.js +1 -0
  44. package/dist/core/AutoDispatcher.js.map +1 -1
  45. package/dist/core/AutoUpdater.d.ts.map +1 -1
  46. package/dist/core/AutoUpdater.js +1 -0
  47. package/dist/core/AutoUpdater.js.map +1 -1
  48. package/dist/core/AutonomousEvolution.d.ts.map +1 -1
  49. package/dist/core/AutonomousEvolution.js +1 -0
  50. package/dist/core/AutonomousEvolution.js.map +1 -1
  51. package/dist/core/BackupManager.d.ts.map +1 -1
  52. package/dist/core/BackupManager.js +1 -0
  53. package/dist/core/BackupManager.js.map +1 -1
  54. package/dist/core/BranchManager.d.ts.map +1 -1
  55. package/dist/core/BranchManager.js +1 -0
  56. package/dist/core/BranchManager.js.map +1 -1
  57. package/dist/core/CaffeinateManager.d.ts.map +1 -1
  58. package/dist/core/CaffeinateManager.js +1 -0
  59. package/dist/core/CaffeinateManager.js.map +1 -1
  60. package/dist/core/DeferredDispatchTracker.d.ts.map +1 -1
  61. package/dist/core/DeferredDispatchTracker.js +1 -0
  62. package/dist/core/DeferredDispatchTracker.js.map +1 -1
  63. package/dist/core/DispatchManager.d.ts.map +1 -1
  64. package/dist/core/DispatchManager.js +2 -0
  65. package/dist/core/DispatchManager.js.map +1 -1
  66. package/dist/core/EvolutionManager.d.ts.map +1 -1
  67. package/dist/core/EvolutionManager.js +1 -0
  68. package/dist/core/EvolutionManager.js.map +1 -1
  69. package/dist/core/ExecutionJournal.d.ts.map +1 -1
  70. package/dist/core/ExecutionJournal.js +1 -0
  71. package/dist/core/ExecutionJournal.js.map +1 -1
  72. package/dist/core/FeedbackManager.d.ts.map +1 -1
  73. package/dist/core/FeedbackManager.js +1 -0
  74. package/dist/core/FeedbackManager.js.map +1 -1
  75. package/dist/core/FileClassifier.d.ts.map +1 -1
  76. package/dist/core/FileClassifier.js +4 -0
  77. package/dist/core/FileClassifier.js.map +1 -1
  78. package/dist/core/ForegroundRestartWatcher.d.ts.map +1 -1
  79. package/dist/core/ForegroundRestartWatcher.js +2 -0
  80. package/dist/core/ForegroundRestartWatcher.js.map +1 -1
  81. package/dist/core/GitStateManager.d.ts.map +1 -1
  82. package/dist/core/GitStateManager.js +1 -0
  83. package/dist/core/GitStateManager.js.map +1 -1
  84. package/dist/core/GitSync.d.ts.map +1 -1
  85. package/dist/core/GitSync.js +3 -0
  86. package/dist/core/GitSync.js.map +1 -1
  87. package/dist/core/GlobalInstallCleanup.d.ts.map +1 -1
  88. package/dist/core/GlobalInstallCleanup.js +2 -0
  89. package/dist/core/GlobalInstallCleanup.js.map +1 -1
  90. package/dist/core/GlobalSecretStore.d.ts.map +1 -1
  91. package/dist/core/GlobalSecretStore.js +2 -0
  92. package/dist/core/GlobalSecretStore.js.map +1 -1
  93. package/dist/core/HandoffManager.d.ts.map +1 -1
  94. package/dist/core/HandoffManager.js +2 -0
  95. package/dist/core/HandoffManager.js.map +1 -1
  96. package/dist/core/LedgerSessionRegistry.d.ts.map +1 -1
  97. package/dist/core/LedgerSessionRegistry.js +1 -0
  98. package/dist/core/LedgerSessionRegistry.js.map +1 -1
  99. package/dist/core/MachineIdentity.d.ts.map +1 -1
  100. package/dist/core/MachineIdentity.js +1 -0
  101. package/dist/core/MachineIdentity.js.map +1 -1
  102. package/dist/core/ParallelDevWiring.d.ts.map +1 -1
  103. package/dist/core/ParallelDevWiring.js +1 -0
  104. package/dist/core/ParallelDevWiring.js.map +1 -1
  105. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  106. package/dist/core/PostUpdateMigrator.js +2 -0
  107. package/dist/core/PostUpdateMigrator.js.map +1 -1
  108. package/dist/core/ProjectMapper.d.ts.map +1 -1
  109. package/dist/core/ProjectMapper.js +2 -0
  110. package/dist/core/ProjectMapper.js.map +1 -1
  111. package/dist/core/RelationshipManager.d.ts.map +1 -1
  112. package/dist/core/RelationshipManager.js +2 -0
  113. package/dist/core/RelationshipManager.js.map +1 -1
  114. package/dist/core/SafeFsExecutor.d.ts +41 -0
  115. package/dist/core/SafeFsExecutor.d.ts.map +1 -0
  116. package/dist/core/SafeFsExecutor.js +146 -0
  117. package/dist/core/SafeFsExecutor.js.map +1 -0
  118. package/dist/core/SafeGitExecutor.d.ts +139 -0
  119. package/dist/core/SafeGitExecutor.d.ts.map +1 -0
  120. package/dist/core/SafeGitExecutor.js +631 -0
  121. package/dist/core/SafeGitExecutor.js.map +1 -0
  122. package/dist/core/ScopeVerifier.d.ts.map +1 -1
  123. package/dist/core/ScopeVerifier.js +1 -0
  124. package/dist/core/ScopeVerifier.js.map +1 -1
  125. package/dist/core/SecretStore.d.ts.map +1 -1
  126. package/dist/core/SecretStore.js +1 -0
  127. package/dist/core/SecretStore.js.map +1 -1
  128. package/dist/core/SharedStateLedger.d.ts.map +1 -1
  129. package/dist/core/SharedStateLedger.js +1 -0
  130. package/dist/core/SharedStateLedger.js.map +1 -1
  131. package/dist/core/SoulManager.d.ts.map +1 -1
  132. package/dist/core/SoulManager.js +2 -0
  133. package/dist/core/SoulManager.js.map +1 -1
  134. package/dist/core/StateManager.d.ts.map +1 -1
  135. package/dist/core/StateManager.js +3 -0
  136. package/dist/core/StateManager.js.map +1 -1
  137. package/dist/core/SyncOrchestrator.d.ts.map +1 -1
  138. package/dist/core/SyncOrchestrator.js +3 -0
  139. package/dist/core/SyncOrchestrator.js.map +1 -1
  140. package/dist/core/UpdateChecker.d.ts.map +1 -1
  141. package/dist/core/UpdateChecker.js +2 -0
  142. package/dist/core/UpdateChecker.js.map +1 -1
  143. package/dist/core/UpgradeGuideProcessor.d.ts.map +1 -1
  144. package/dist/core/UpgradeGuideProcessor.js +2 -0
  145. package/dist/core/UpgradeGuideProcessor.js.map +1 -1
  146. package/dist/core/WorktreeManager.d.ts.map +1 -1
  147. package/dist/core/WorktreeManager.js +7 -0
  148. package/dist/core/WorktreeManager.js.map +1 -1
  149. package/dist/knowledge/KnowledgeManager.d.ts.map +1 -1
  150. package/dist/knowledge/KnowledgeManager.js +1 -0
  151. package/dist/knowledge/KnowledgeManager.js.map +1 -1
  152. package/dist/lifeline/ServerSupervisor.d.ts.map +1 -1
  153. package/dist/lifeline/ServerSupervisor.js +14 -0
  154. package/dist/lifeline/ServerSupervisor.js.map +1 -1
  155. package/dist/lifeline/TelegramLifeline.d.ts.map +1 -1
  156. package/dist/lifeline/TelegramLifeline.js +1 -0
  157. package/dist/lifeline/TelegramLifeline.js.map +1 -1
  158. package/dist/lifeline/droppedMessages.d.ts.map +1 -1
  159. package/dist/lifeline/droppedMessages.js +1 -0
  160. package/dist/lifeline/droppedMessages.js.map +1 -1
  161. package/dist/memory/EpisodicMemory.d.ts.map +1 -1
  162. package/dist/memory/EpisodicMemory.js +1 -0
  163. package/dist/memory/EpisodicMemory.js.map +1 -1
  164. package/dist/memory/TopicMemory.d.ts.map +1 -1
  165. package/dist/memory/TopicMemory.js +4 -0
  166. package/dist/memory/TopicMemory.js.map +1 -1
  167. package/dist/messaging/AgentTokenManager.d.ts.map +1 -1
  168. package/dist/messaging/AgentTokenManager.js +1 -0
  169. package/dist/messaging/AgentTokenManager.js.map +1 -1
  170. package/dist/messaging/DropPickup.js +1 -0
  171. package/dist/messaging/DropPickup.js.map +1 -1
  172. package/dist/messaging/GitSyncTransport.d.ts.map +1 -1
  173. package/dist/messaging/GitSyncTransport.js +3 -0
  174. package/dist/messaging/GitSyncTransport.js.map +1 -1
  175. package/dist/messaging/MessageStore.d.ts.map +1 -1
  176. package/dist/messaging/MessageStore.js +2 -0
  177. package/dist/messaging/MessageStore.js.map +1 -1
  178. package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
  179. package/dist/messaging/TelegramAdapter.js +4 -0
  180. package/dist/messaging/TelegramAdapter.js.map +1 -1
  181. package/dist/messaging/backends/BaileysBackend.d.ts.map +1 -1
  182. package/dist/messaging/backends/BaileysBackend.js +2 -0
  183. package/dist/messaging/backends/BaileysBackend.js.map +1 -1
  184. package/dist/messaging/shared/EncryptedAuthStore.d.ts.map +1 -1
  185. package/dist/messaging/shared/EncryptedAuthStore.js +2 -0
  186. package/dist/messaging/shared/EncryptedAuthStore.js.map +1 -1
  187. package/dist/messaging/shared/MessageLogger.d.ts.map +1 -1
  188. package/dist/messaging/shared/MessageLogger.js +1 -0
  189. package/dist/messaging/shared/MessageLogger.js.map +1 -1
  190. package/dist/messaging/shared/PrivacyConsent.d.ts.map +1 -1
  191. package/dist/messaging/shared/PrivacyConsent.js +1 -0
  192. package/dist/messaging/shared/PrivacyConsent.js.map +1 -1
  193. package/dist/messaging/shared/SessionChannelRegistry.d.ts.map +1 -1
  194. package/dist/messaging/shared/SessionChannelRegistry.js +1 -0
  195. package/dist/messaging/shared/SessionChannelRegistry.js.map +1 -1
  196. package/dist/moltbridge/ProfileCompiler.d.ts.map +1 -1
  197. package/dist/moltbridge/ProfileCompiler.js +3 -0
  198. package/dist/moltbridge/ProfileCompiler.js.map +1 -1
  199. package/dist/monitoring/CommitmentTracker.d.ts.map +1 -1
  200. package/dist/monitoring/CommitmentTracker.js +1 -0
  201. package/dist/monitoring/CommitmentTracker.js.map +1 -1
  202. package/dist/monitoring/CredentialProvider.d.ts.map +1 -1
  203. package/dist/monitoring/CredentialProvider.js +1 -0
  204. package/dist/monitoring/CredentialProvider.js.map +1 -1
  205. package/dist/monitoring/HealthChecker.d.ts.map +1 -1
  206. package/dist/monitoring/HealthChecker.js +1 -0
  207. package/dist/monitoring/HealthChecker.js.map +1 -1
  208. package/dist/monitoring/HookEventReceiver.d.ts.map +1 -1
  209. package/dist/monitoring/HookEventReceiver.js +1 -0
  210. package/dist/monitoring/HookEventReceiver.js.map +1 -1
  211. package/dist/monitoring/InstructionsVerifier.d.ts.map +1 -1
  212. package/dist/monitoring/InstructionsVerifier.js +1 -0
  213. package/dist/monitoring/InstructionsVerifier.js.map +1 -1
  214. package/dist/monitoring/PresenceProxy.d.ts.map +1 -1
  215. package/dist/monitoring/PresenceProxy.js +4 -0
  216. package/dist/monitoring/PresenceProxy.js.map +1 -1
  217. package/dist/monitoring/QuotaTracker.d.ts.map +1 -1
  218. package/dist/monitoring/QuotaTracker.js +1 -0
  219. package/dist/monitoring/QuotaTracker.js.map +1 -1
  220. package/dist/monitoring/SessionMigrator.d.ts.map +1 -1
  221. package/dist/monitoring/SessionMigrator.js +1 -0
  222. package/dist/monitoring/SessionMigrator.js.map +1 -1
  223. package/dist/monitoring/SessionRecovery.d.ts.map +1 -1
  224. package/dist/monitoring/SessionRecovery.js +1 -0
  225. package/dist/monitoring/SessionRecovery.js.map +1 -1
  226. package/dist/monitoring/TelemetryAuth.d.ts.map +1 -1
  227. package/dist/monitoring/TelemetryAuth.js +2 -0
  228. package/dist/monitoring/TelemetryAuth.js.map +1 -1
  229. package/dist/monitoring/TriageOrchestrator.d.ts.map +1 -1
  230. package/dist/monitoring/TriageOrchestrator.js +2 -0
  231. package/dist/monitoring/TriageOrchestrator.js.map +1 -1
  232. package/dist/monitoring/WorktreeReaper.d.ts.map +1 -1
  233. package/dist/monitoring/WorktreeReaper.js +3 -0
  234. package/dist/monitoring/WorktreeReaper.js.map +1 -1
  235. package/dist/monitoring/probes/PlatformProbe.d.ts.map +1 -1
  236. package/dist/monitoring/probes/PlatformProbe.js +2 -0
  237. package/dist/monitoring/probes/PlatformProbe.js.map +1 -1
  238. package/dist/paste/PasteManager.d.ts.map +1 -1
  239. package/dist/paste/PasteManager.js +4 -0
  240. package/dist/paste/PasteManager.js.map +1 -1
  241. package/dist/publishing/PrivateViewer.d.ts.map +1 -1
  242. package/dist/publishing/PrivateViewer.js +1 -0
  243. package/dist/publishing/PrivateViewer.js.map +1 -1
  244. package/dist/scheduler/JobScheduler.d.ts.map +1 -1
  245. package/dist/scheduler/JobScheduler.js +1 -0
  246. package/dist/scheduler/JobScheduler.js.map +1 -1
  247. package/dist/server/routes.d.ts.map +1 -1
  248. package/dist/server/routes.js +21 -9
  249. package/dist/server/routes.js.map +1 -1
  250. package/dist/threadline/AgentDiscovery.d.ts.map +1 -1
  251. package/dist/threadline/AgentDiscovery.js +1 -0
  252. package/dist/threadline/AgentDiscovery.js.map +1 -1
  253. package/dist/threadline/AgentTrustManager.d.ts.map +1 -1
  254. package/dist/threadline/AgentTrustManager.js +1 -0
  255. package/dist/threadline/AgentTrustManager.js.map +1 -1
  256. package/dist/threadline/CircuitBreaker.d.ts.map +1 -1
  257. package/dist/threadline/CircuitBreaker.js +1 -0
  258. package/dist/threadline/CircuitBreaker.js.map +1 -1
  259. package/dist/threadline/ComputeMeter.d.ts.map +1 -1
  260. package/dist/threadline/ComputeMeter.js +1 -0
  261. package/dist/threadline/ComputeMeter.js.map +1 -1
  262. package/dist/threadline/ContextThreadMap.d.ts.map +1 -1
  263. package/dist/threadline/ContextThreadMap.js +1 -0
  264. package/dist/threadline/ContextThreadMap.js.map +1 -1
  265. package/dist/threadline/InvitationManager.d.ts.map +1 -1
  266. package/dist/threadline/InvitationManager.js +1 -0
  267. package/dist/threadline/InvitationManager.js.map +1 -1
  268. package/dist/threadline/MCPAuth.d.ts.map +1 -1
  269. package/dist/threadline/MCPAuth.js +1 -0
  270. package/dist/threadline/MCPAuth.js.map +1 -1
  271. package/dist/threadline/PipeSessionSpawner.d.ts.map +1 -1
  272. package/dist/threadline/PipeSessionSpawner.js +2 -0
  273. package/dist/threadline/PipeSessionSpawner.js.map +1 -1
  274. package/dist/threadline/RateLimiter.d.ts.map +1 -1
  275. package/dist/threadline/RateLimiter.js +1 -0
  276. package/dist/threadline/RateLimiter.js.map +1 -1
  277. package/dist/threadline/SessionLifecycle.d.ts.map +1 -1
  278. package/dist/threadline/SessionLifecycle.js +1 -0
  279. package/dist/threadline/SessionLifecycle.js.map +1 -1
  280. package/dist/threadline/ThreadlineBootstrap.d.ts.map +1 -1
  281. package/dist/threadline/ThreadlineBootstrap.js +1 -0
  282. package/dist/threadline/ThreadlineBootstrap.js.map +1 -1
  283. package/dist/threadline/WakeSocketServer.d.ts.map +1 -1
  284. package/dist/threadline/WakeSocketServer.js +2 -0
  285. package/dist/threadline/WakeSocketServer.js.map +1 -1
  286. package/dist/threadline/listener-daemon.d.ts.map +1 -1
  287. package/dist/threadline/listener-daemon.js +2 -0
  288. package/dist/threadline/listener-daemon.js.map +1 -1
  289. package/dist/users/UserManager.d.ts.map +1 -1
  290. package/dist/users/UserManager.js +1 -0
  291. package/dist/users/UserManager.js.map +1 -1
  292. package/dist/users/UserOnboarding.d.ts.map +1 -1
  293. package/dist/users/UserOnboarding.js +1 -0
  294. package/dist/users/UserOnboarding.js.map +1 -1
  295. package/dist/utils/jsonl-rotation.d.ts.map +1 -1
  296. package/dist/utils/jsonl-rotation.js +1 -0
  297. package/dist/utils/jsonl-rotation.js.map +1 -1
  298. package/package.json +4 -2
  299. package/scripts/add-migration-marker.js +121 -0
  300. package/scripts/analyze-release.js +6 -0
  301. package/scripts/check-contract-evidence.js +2 -0
  302. package/scripts/destructive-command-shim.js +1 -0
  303. package/scripts/fix-better-sqlite3.cjs +2 -0
  304. package/scripts/generate-builtin-manifest.cjs +1 -0
  305. package/scripts/instar-dev-precommit.js +2 -0
  306. package/scripts/lint-no-direct-destructive.js +597 -0
  307. package/scripts/migrate-incident-2026-04-17.mjs +1 -0
  308. package/scripts/pre-push-gate.js +24 -0
  309. package/scripts/test-bootstrap-relay.mjs +1 -0
  310. package/scripts/worktree-commit-msg-hook.js +4 -0
  311. package/scripts/worktree-precommit-gate.js +1 -0
  312. package/src/data/builtin-manifest.json +98 -98
  313. package/src/templates/scripts/git-sync-gate.sh +4 -0
  314. package/upgrades/0.28.76.md +67 -0
  315. package/upgrades/side-effects/comprehensive-destructive-tool-containment-foundation.md +74 -0
  316. package/upgrades/side-effects/telegram-lifeline-version-missing-info.md +76 -0
@@ -0,0 +1,631 @@
1
+ // safe-git-allow: this file is the single funnel point for destructive git invocations.
2
+ /**
3
+ * SafeGitExecutor — the single funnel for destructive git invocations.
4
+ *
5
+ * Background: PR #96 (DESTRUCTIVE-TOOL-TARGET-GUARDS-SPEC) added
6
+ * `assertNotInstarSourceTree` to the constructors of `GitSyncManager`,
7
+ * `BranchManager`, and `HandoffManager`. Five days later, Incident B recurred
8
+ * because test fixtures invoked `execFileSync('git', ['add', '-A'], { cwd })`
9
+ * directly — bypassing the manager constructors entirely.
10
+ *
11
+ * This module is the funnel layer described in
12
+ * `docs/specs/COMPREHENSIVE-DESTRUCTIVE-TOOL-CONTAINMENT-SPEC.md`. Every
13
+ * destructive git invocation in the codebase routes through one of three
14
+ * methods on this class, each of which calls `assertNotInstarSourceTree`
15
+ * BEFORE spawning git. Read-only verbs may go through `readSync`, which
16
+ * also runs the assertion (defense-in-depth against repo-local aliases).
17
+ *
18
+ * Constraints enforced:
19
+ * - Every directory the subprocess could mutate is canonicalized via
20
+ * `realpathSync` and passed through `assertNotInstarSourceTree`. This
21
+ * covers `opts.cwd`, the `-C <dir>` target, and the path values in
22
+ * `--git-dir=<path>`, `--work-tree=<path>`. Any one being the instar
23
+ * source causes the call to throw before subprocess spawn.
24
+ * - Caller-supplied env has the git-redirection denylist stripped:
25
+ * GIT_DIR, GIT_WORK_TREE, GIT_INDEX_FILE, GIT_OBJECT_DIRECTORY,
26
+ * GIT_COMMON_DIR, GIT_NAMESPACE, GIT_CONFIG*, GIT_CEILING_DIRECTORIES,
27
+ * GIT_DISCOVERY_ACROSS_FILESYSTEM.
28
+ * - GIT_CONFIG_GLOBAL=/dev/null + GIT_CONFIG_SYSTEM=/dev/null +
29
+ * GIT_CONFIG_NOSYSTEM=1 are injected unconditionally. This disables
30
+ * user-level and system-level git config (including aliases that could
31
+ * rebind a "read-only" verb to a destructive command).
32
+ * - A JSON line is appended to .instar/audit/destructive-ops.jsonl per
33
+ * call (fail-soft on log write failure).
34
+ */
35
+ import { execFileSync, spawn as nodeSpawn, } from 'node:child_process';
36
+ import fs from 'node:fs';
37
+ import path from 'node:path';
38
+ import { fileURLToPath } from 'node:url';
39
+ import { assertNotInstarSourceTree, SourceTreeGuardError, } from './SourceTreeGuard.js';
40
+ // ── Verb classification ─────────────────────────────────────────────
41
+ /**
42
+ * Verbs treated as destructive. Closed enumeration; additions are spec changes.
43
+ */
44
+ export const DESTRUCTIVE_GIT_VERBS = new Set([
45
+ 'add',
46
+ 'am',
47
+ 'apply',
48
+ 'branch', // shape-checked: bare `branch <name>` is destructive
49
+ 'checkout',
50
+ 'cherry-pick',
51
+ 'clean',
52
+ 'clone',
53
+ 'commit',
54
+ 'fetch',
55
+ 'gc',
56
+ 'init',
57
+ 'merge',
58
+ 'mv',
59
+ 'pull',
60
+ 'push',
61
+ 'rebase',
62
+ 'reset',
63
+ 'restore',
64
+ 'revert',
65
+ 'rm',
66
+ 'stash',
67
+ 'submodule',
68
+ 'switch',
69
+ 'tag',
70
+ 'update-ref',
71
+ 'worktree', // shape-checked: `worktree list` is read-only
72
+ 'prune',
73
+ 'notes',
74
+ 'replace',
75
+ 'filter-branch',
76
+ 'remote', // shape-checked: `remote get-url` is read-only
77
+ 'config', // shape-checked: `config --get` is read-only
78
+ 'format-patch', // shape-checked: --inline is destructive
79
+ ]);
80
+ /**
81
+ * Read-only verbs explicitly safe to call. Closed enumeration.
82
+ */
83
+ export const READONLY_GIT_VERBS = new Set([
84
+ 'status',
85
+ 'log',
86
+ 'diff',
87
+ 'show',
88
+ 'rev-parse',
89
+ 'rev-list',
90
+ 'ls-files',
91
+ 'ls-tree',
92
+ 'ls-remote',
93
+ 'describe',
94
+ 'name-rev',
95
+ 'blame',
96
+ 'cat-file',
97
+ 'grep',
98
+ 'shortlog',
99
+ 'count-objects',
100
+ 'fsck',
101
+ 'var',
102
+ 'version',
103
+ '--version',
104
+ 'help',
105
+ 'write-tree',
106
+ 'interpret-trailers',
107
+ 'check-ref-format',
108
+ 'symbolic-ref',
109
+ 'for-each-ref',
110
+ 'merge-base',
111
+ 'reflog', // read-only by default; reflog expire/delete is destructive (caller must use execSync)
112
+ 'hash-object',
113
+ 'config', // overlap with destructive set; readSync shape-check enforces --get only
114
+ 'remote', // overlap; readSync shape-check enforces list/get-url only
115
+ 'branch', // overlap; readSync shape-check enforces --list / -l / --show-current / -v
116
+ 'worktree', // overlap; readSync shape-check enforces list only
117
+ 'format-patch', // overlap; readSync shape-check rejects --inline
118
+ 'stash', // shape-check: `stash list` / `stash show` allowed
119
+ ]);
120
+ // ── Env denylist ────────────────────────────────────────────────────
121
+ const GIT_ENV_DENYLIST = new Set([
122
+ 'GIT_DIR',
123
+ 'GIT_WORK_TREE',
124
+ 'GIT_INDEX_FILE',
125
+ 'GIT_OBJECT_DIRECTORY',
126
+ 'GIT_COMMON_DIR',
127
+ 'GIT_NAMESPACE',
128
+ 'GIT_CONFIG',
129
+ 'GIT_CONFIG_GLOBAL',
130
+ 'GIT_CONFIG_SYSTEM',
131
+ 'GIT_CONFIG_NOSYSTEM',
132
+ 'GIT_CONFIG_PARAMETERS',
133
+ 'GIT_CONFIG_COUNT',
134
+ 'GIT_CEILING_DIRECTORIES',
135
+ 'GIT_DISCOVERY_ACROSS_FILESYSTEM',
136
+ ]);
137
+ function sanitizeEnv(callerEnv) {
138
+ // Start from a copy of process.env, then strip the denylist, then strip
139
+ // anything the caller supplied that's on the denylist or that matches
140
+ // GIT_CONFIG_KEY_* / GIT_CONFIG_VALUE_*.
141
+ const merged = { ...process.env, ...(callerEnv || {}) };
142
+ for (const k of Object.keys(merged)) {
143
+ if (GIT_ENV_DENYLIST.has(k)) {
144
+ delete merged[k];
145
+ continue;
146
+ }
147
+ if (/^GIT_CONFIG_(KEY|VALUE)_\d+$/.test(k)) {
148
+ delete merged[k];
149
+ }
150
+ }
151
+ // Inject unconditional config disables.
152
+ merged.GIT_CONFIG_GLOBAL = '/dev/null';
153
+ merged.GIT_CONFIG_SYSTEM = '/dev/null';
154
+ merged.GIT_CONFIG_NOSYSTEM = '1';
155
+ return merged;
156
+ }
157
+ // ── Pre-verb global flags (a closed set) ────────────────────────────
158
+ const PRE_VERB_FLAGS_TAKING_VALUE = new Set([
159
+ '-C',
160
+ '-c',
161
+ '--git-dir',
162
+ '--work-tree',
163
+ '--namespace',
164
+ ]);
165
+ const PRE_VERB_FLAGS_NO_VALUE = new Set([
166
+ '--bare',
167
+ '--no-pager',
168
+ '-P',
169
+ '--no-replace-objects',
170
+ '--literal-pathspecs',
171
+ '--glob-pathspecs',
172
+ '--noglob-pathspecs',
173
+ '--icase-pathspecs',
174
+ '--exec-path', // when used without `=` it's actually informational; allow
175
+ '-p',
176
+ '--paginate',
177
+ '--no-optional-locks',
178
+ ]);
179
+ /**
180
+ * Walk the args array skipping leading pre-verb global flags. Return:
181
+ * { verb, targets: [opts.cwd, -C target, --git-dir target, --work-tree target] }
182
+ *
183
+ * Targets are canonicalized via `realpathSync`. If realpath fails on an
184
+ * existing path the raw value is passed through; the assertion handles
185
+ * uncanonicalizable inputs in fail-closed fashion.
186
+ */
187
+ function extractVerbAndTargets(args, cwd) {
188
+ const targets = [canonicalize(cwd)];
189
+ let i = 0;
190
+ while (i < args.length) {
191
+ const a = args[i];
192
+ if (a === undefined)
193
+ break;
194
+ if (a === '-C') {
195
+ const next = args[i + 1];
196
+ if (next === undefined) {
197
+ throw new Error(`SafeGitExecutor: \`-C\` flag missing value: ${args.join(' ')}`);
198
+ }
199
+ targets.push(canonicalize(next));
200
+ i += 2;
201
+ continue;
202
+ }
203
+ if (a === '-c') {
204
+ // -c key=value — skip pair, no target.
205
+ const next = args[i + 1];
206
+ if (next === undefined) {
207
+ throw new Error(`SafeGitExecutor: \`-c\` flag missing value: ${args.join(' ')}`);
208
+ }
209
+ i += 2;
210
+ continue;
211
+ }
212
+ if (a.startsWith('--git-dir=')) {
213
+ const value = a.slice('--git-dir='.length);
214
+ targets.push(canonicalize(value));
215
+ i += 1;
216
+ continue;
217
+ }
218
+ if (a === '--git-dir') {
219
+ const next = args[i + 1];
220
+ if (next === undefined) {
221
+ throw new Error(`SafeGitExecutor: \`--git-dir\` flag missing value: ${args.join(' ')}`);
222
+ }
223
+ targets.push(canonicalize(next));
224
+ i += 2;
225
+ continue;
226
+ }
227
+ if (a.startsWith('--work-tree=')) {
228
+ const value = a.slice('--work-tree='.length);
229
+ targets.push(canonicalize(value));
230
+ i += 1;
231
+ continue;
232
+ }
233
+ if (a === '--work-tree') {
234
+ const next = args[i + 1];
235
+ if (next === undefined) {
236
+ throw new Error(`SafeGitExecutor: \`--work-tree\` flag missing value: ${args.join(' ')}`);
237
+ }
238
+ targets.push(canonicalize(next));
239
+ i += 2;
240
+ continue;
241
+ }
242
+ if (a.startsWith('--namespace=')) {
243
+ i += 1;
244
+ continue;
245
+ }
246
+ if (a === '--namespace') {
247
+ const next = args[i + 1];
248
+ if (next === undefined) {
249
+ throw new Error(`SafeGitExecutor: \`--namespace\` flag missing value: ${args.join(' ')}`);
250
+ }
251
+ i += 2;
252
+ continue;
253
+ }
254
+ if (PRE_VERB_FLAGS_NO_VALUE.has(a)) {
255
+ i += 1;
256
+ continue;
257
+ }
258
+ // Not a recognized pre-verb flag — must be the verb.
259
+ if (a.startsWith('-')) {
260
+ // Unrecognized leading flag — fail loud (mirrors git's own conservative behavior).
261
+ throw new Error(`SafeGitExecutor: unrecognized pre-verb flag '${a}' in args ${JSON.stringify(args)}; ` +
262
+ `add it to PRE_VERB_FLAGS_NO_VALUE or PRE_VERB_FLAGS_TAKING_VALUE if it is a legitimate git global option.`);
263
+ }
264
+ return { verb: a, targets: dedupeTargets(targets) };
265
+ }
266
+ throw new Error(`SafeGitExecutor: no verb found in args ${JSON.stringify(args)}`);
267
+ }
268
+ function canonicalize(p) {
269
+ try {
270
+ return fs.realpathSync(path.resolve(p));
271
+ }
272
+ catch {
273
+ // realpath failed (path doesn't exist, EACCES, etc.) — return resolved
274
+ // absolute. The assertion handles non-existent inputs via its
275
+ // nearest-existing-ancestor walk.
276
+ try {
277
+ return path.resolve(p);
278
+ }
279
+ catch {
280
+ return p;
281
+ }
282
+ }
283
+ }
284
+ function dedupeTargets(targets) {
285
+ const seen = new Set();
286
+ const out = [];
287
+ for (const t of targets) {
288
+ if (!seen.has(t)) {
289
+ seen.add(t);
290
+ out.push(t);
291
+ }
292
+ }
293
+ return out;
294
+ }
295
+ // ── Shape checks for ambiguous verbs ────────────────────────────────
296
+ /**
297
+ * Returns true if the args under a `branch` verb describe a read-only
298
+ * invocation (`branch --list`, `branch -l`, `branch --show-current`,
299
+ * `branch -v` (no name), bare `branch` (list mode)). Returns false for
300
+ * destructive shapes (`branch <name>`, `branch -d`, `branch -D`,
301
+ * `branch -m`, `branch -M`, `branch --set-upstream-to=`, etc.).
302
+ */
303
+ function isReadOnlyBranchInvocation(verbArgs) {
304
+ // verbArgs is the slice AFTER the `branch` verb. If empty, that's `git branch` (list).
305
+ if (verbArgs.length === 0)
306
+ return true;
307
+ const destructiveFlags = new Set([
308
+ '-d',
309
+ '-D',
310
+ '--delete',
311
+ '-m',
312
+ '-M',
313
+ '--move',
314
+ '-c',
315
+ '-C',
316
+ '--copy',
317
+ '--unset-upstream',
318
+ '--edit-description',
319
+ '--track',
320
+ '--no-track',
321
+ ]);
322
+ for (const a of verbArgs) {
323
+ if (destructiveFlags.has(a))
324
+ return false;
325
+ if (a.startsWith('--set-upstream'))
326
+ return false;
327
+ if (!a.startsWith('-')) {
328
+ // Bare positional arg = branch name = create branch (destructive).
329
+ return false;
330
+ }
331
+ }
332
+ return true;
333
+ }
334
+ function isReadOnlyRemoteInvocation(verbArgs) {
335
+ if (verbArgs.length === 0)
336
+ return true; // `git remote` — list mode
337
+ const sub = verbArgs[0];
338
+ if (sub === '-v' || sub === '--verbose')
339
+ return true;
340
+ if (sub === 'show' || sub === 'get-url')
341
+ return true;
342
+ return false;
343
+ }
344
+ function isReadOnlyWorktreeInvocation(verbArgs) {
345
+ if (verbArgs.length === 0)
346
+ return false;
347
+ return verbArgs[0] === 'list';
348
+ }
349
+ function isReadOnlyConfigInvocation(verbArgs) {
350
+ // Read-only config: --get, --get-all, --get-regexp, --list, -l, --get-color,
351
+ // --get-colorbool. Destructive: bare set, --add, --unset, --replace-all,
352
+ // --rename-section, --remove-section.
353
+ for (const a of verbArgs) {
354
+ if (a === '--get' || a === '--get-all' || a === '--get-regexp')
355
+ return true;
356
+ if (a === '--list' || a === '-l')
357
+ return true;
358
+ if (a === '--get-color' || a === '--get-colorbool')
359
+ return true;
360
+ if (a === '--get-urlmatch')
361
+ return true;
362
+ }
363
+ return false;
364
+ }
365
+ function isReadOnlyFormatPatchInvocation(verbArgs) {
366
+ // format-patch is read-only by default. --inline rewrites in-tree files
367
+ // and is destructive; it forces the caller to use execSync.
368
+ for (const a of verbArgs) {
369
+ if (a === '--inline')
370
+ return false;
371
+ }
372
+ return true;
373
+ }
374
+ function isReadOnlyStashInvocation(verbArgs) {
375
+ if (verbArgs.length === 0)
376
+ return false;
377
+ const sub = verbArgs[0];
378
+ return sub === 'list' || sub === 'show';
379
+ }
380
+ function isReadOnlyReflogInvocation(verbArgs) {
381
+ if (verbArgs.length === 0)
382
+ return true;
383
+ const sub = verbArgs[0];
384
+ // Default subcommand is `show` (read-only). `expire`, `delete` mutate refs.
385
+ return sub === 'show' || sub === 'exists';
386
+ }
387
+ /**
388
+ * Ambiguous-verb shape check. Returns true if (verb, verbArgs) describes
389
+ * a read-only invocation. Returns false for unambiguously-destructive
390
+ * shapes. Returns null if the verb isn't ambiguous (caller uses verb-set
391
+ * membership).
392
+ */
393
+ function isReadOnlyShape(verb, verbArgs) {
394
+ switch (verb) {
395
+ case 'branch':
396
+ return isReadOnlyBranchInvocation(verbArgs);
397
+ case 'remote':
398
+ return isReadOnlyRemoteInvocation(verbArgs);
399
+ case 'worktree':
400
+ return isReadOnlyWorktreeInvocation(verbArgs);
401
+ case 'config':
402
+ return isReadOnlyConfigInvocation(verbArgs);
403
+ case 'format-patch':
404
+ return isReadOnlyFormatPatchInvocation(verbArgs);
405
+ case 'stash':
406
+ return isReadOnlyStashInvocation(verbArgs);
407
+ case 'reflog':
408
+ return isReadOnlyReflogInvocation(verbArgs);
409
+ default:
410
+ return null;
411
+ }
412
+ }
413
+ /** Return the verbArgs (slice after the verb), accounting for pre-verb flags. */
414
+ function sliceAfterVerb(args, verb) {
415
+ const idx = args.indexOf(verb);
416
+ if (idx < 0)
417
+ return [];
418
+ return args.slice(idx + 1);
419
+ }
420
+ /**
421
+ * Where to write audit lines. Override via env for tests.
422
+ * INSTAR_AUDIT_LOG_DIR — directory for the JSONL file.
423
+ * INSTAR_AUDIT_LOG_DISABLED=1 — skip audit logging entirely.
424
+ */
425
+ function auditLogPath() {
426
+ if (process.env.INSTAR_AUDIT_LOG_DISABLED === '1')
427
+ return null;
428
+ const overrideDir = process.env.INSTAR_AUDIT_LOG_DIR;
429
+ if (overrideDir) {
430
+ return path.join(overrideDir, 'destructive-ops.jsonl');
431
+ }
432
+ // Default: <cwd>/.instar/audit/destructive-ops.jsonl
433
+ return path.join(process.cwd(), '.instar', 'audit', 'destructive-ops.jsonl');
434
+ }
435
+ export function appendAuditEntry(entry) {
436
+ const file = auditLogPath();
437
+ if (!file)
438
+ return;
439
+ try {
440
+ fs.mkdirSync(path.dirname(file), { recursive: true });
441
+ fs.appendFileSync(file, JSON.stringify(entry) + '\n');
442
+ }
443
+ catch (err) {
444
+ // Fail-soft: writing audit must never block the operation.
445
+ try {
446
+ process.stderr.write(`[SafeGitExecutor] audit log write failed: ${err.message}\n`);
447
+ }
448
+ catch {
449
+ // ignore
450
+ }
451
+ }
452
+ }
453
+ function captureCallerFrame() {
454
+ const e = new Error();
455
+ const stack = (e.stack || '').split('\n');
456
+ // Skip 0 (Error), 1 (this fn), 2 (caller in this file), pick 3.
457
+ const frame = stack[3] || stack[2] || '';
458
+ return frame.trim();
459
+ }
460
+ // ── Errors ─────────────────────────────────────────────────────────
461
+ export class SafeGitExecutorError extends Error {
462
+ code = 'INSTAR_SAFE_GIT_EXECUTOR';
463
+ constructor(message) {
464
+ super(message);
465
+ this.name = 'SafeGitExecutorError';
466
+ }
467
+ }
468
+ // ── The funnel ──────────────────────────────────────────────────────
469
+ export class SafeGitExecutor {
470
+ /**
471
+ * Synchronous destructive git execution.
472
+ *
473
+ * 1. Extract the verb and ALL target directories from args + opts.cwd.
474
+ * 2. Canonicalize each target and call assertNotInstarSourceTree on each.
475
+ * 3. Verify the verb is in DESTRUCTIVE_GIT_VERBS (or is an ambiguous verb
476
+ * in destructive shape). Read-only verbs throw — callers must use readSync.
477
+ * 4. Strip env denylist; inject GIT_CONFIG_GLOBAL/SYSTEM=/dev/null.
478
+ * 5. Spawn git via execFileSync; return stdout.
479
+ *
480
+ * Throws SourceTreeGuardError if any target is the instar source tree.
481
+ * Throws SafeGitExecutorError on classification mismatch or arg errors.
482
+ */
483
+ static execSync(args, opts) {
484
+ const { verb, targets } = extractVerbAndTargets(args, opts.cwd);
485
+ // Run source-tree assertion against every target.
486
+ runSourceTreeChecks(targets, opts.operation, 'git', verb);
487
+ // Verb classification.
488
+ const verbArgs = sliceAfterVerb(args, verb);
489
+ const ambiguousReadOnly = isReadOnlyShape(verb, verbArgs);
490
+ if (ambiguousReadOnly === true) {
491
+ // The verb is ambiguous and the shape is read-only — caller used the
492
+ // wrong method. Fail loud rather than silently allow.
493
+ audit('git', opts.operation, verb, targets[0], 'denied', 'read-only-shape-via-execSync');
494
+ throw new SafeGitExecutorError(`SafeGitExecutor.execSync called with read-only shape '${verb} ${verbArgs.join(' ')}' — use SafeGitExecutor.readSync instead.`);
495
+ }
496
+ if (ambiguousReadOnly === null && !DESTRUCTIVE_GIT_VERBS.has(verb)) {
497
+ // Pure read-only verb routed through execSync.
498
+ audit('git', opts.operation, verb, targets[0], 'denied', 'readonly-verb-via-execSync');
499
+ throw new SafeGitExecutorError(`SafeGitExecutor.execSync called with read-only verb '${verb}' — use SafeGitExecutor.readSync instead.`);
500
+ }
501
+ const env = sanitizeEnv(opts.env);
502
+ let stdout;
503
+ try {
504
+ stdout = execFileSync('git', args, {
505
+ cwd: opts.cwd,
506
+ stdio: opts.stdio ?? 'pipe',
507
+ encoding: opts.encoding ?? 'utf-8',
508
+ timeout: opts.timeout ?? 30000,
509
+ env,
510
+ input: opts.input,
511
+ maxBuffer: opts.maxBuffer ?? 10 * 1024 * 1024,
512
+ });
513
+ }
514
+ catch (err) {
515
+ audit('git', opts.operation, verb, targets[0], 'denied', `subprocess-error: ${err.message}`);
516
+ throw err;
517
+ }
518
+ audit('git', opts.operation, verb, targets[0], 'allowed');
519
+ return stdout || '';
520
+ }
521
+ /**
522
+ * Async/streaming variant. Same guard semantics as execSync.
523
+ */
524
+ static spawn(args, opts) {
525
+ const { verb, targets } = extractVerbAndTargets(args, opts.cwd);
526
+ runSourceTreeChecks(targets, opts.operation, 'git', verb);
527
+ const verbArgs = sliceAfterVerb(args, verb);
528
+ const ambiguousReadOnly = isReadOnlyShape(verb, verbArgs);
529
+ if (ambiguousReadOnly === true) {
530
+ audit('git', opts.operation, verb, targets[0], 'denied', 'read-only-shape-via-spawn');
531
+ throw new SafeGitExecutorError(`SafeGitExecutor.spawn called with read-only shape '${verb}' — use SafeGitExecutor.readSync instead.`);
532
+ }
533
+ if (ambiguousReadOnly === null && !DESTRUCTIVE_GIT_VERBS.has(verb)) {
534
+ audit('git', opts.operation, verb, targets[0], 'denied', 'readonly-verb-via-spawn');
535
+ throw new SafeGitExecutorError(`SafeGitExecutor.spawn called with read-only verb '${verb}' — use SafeGitExecutor.readSync instead.`);
536
+ }
537
+ const env = sanitizeEnv(opts.env);
538
+ const spawnOpts = {
539
+ cwd: opts.cwd,
540
+ stdio: opts.stdio ?? 'pipe',
541
+ env,
542
+ };
543
+ audit('git', opts.operation, verb, targets[0], 'allowed');
544
+ return nodeSpawn('git', args, spawnOpts);
545
+ }
546
+ /**
547
+ * Read-only escape valve. Runs `git <args>` after verifying:
548
+ * - Verb is in READONLY_GIT_VERBS (or is an ambiguous verb in read-only shape).
549
+ * - assertNotInstarSourceTree passes against every target (defense-in-depth
550
+ * against repo-local aliases that could rebind a "read-only" verb).
551
+ */
552
+ static readSync(args, opts) {
553
+ const { verb, targets } = extractVerbAndTargets(args, opts.cwd);
554
+ // Verb classification first, BEFORE source-tree check, so callers
555
+ // misusing this method get a clear "use execSync" error rather than
556
+ // a guard error first.
557
+ const verbArgs = sliceAfterVerb(args, verb);
558
+ const ambiguousReadOnly = isReadOnlyShape(verb, verbArgs);
559
+ if (ambiguousReadOnly === false) {
560
+ audit('git', opts.operation, verb, targets[0], 'denied', 'destructive-shape-via-readSync');
561
+ throw new SafeGitExecutorError(`SafeGitExecutor.readSync called with destructive shape '${verb} ${verbArgs.join(' ')}' — use SafeGitExecutor.execSync instead.`);
562
+ }
563
+ if (ambiguousReadOnly === null && !READONLY_GIT_VERBS.has(verb)) {
564
+ audit('git', opts.operation, verb, targets[0], 'denied', 'destructive-verb-via-readSync');
565
+ throw new SafeGitExecutorError(`SafeGitExecutor.readSync called with destructive verb '${verb}' — use SafeGitExecutor.execSync instead.`);
566
+ }
567
+ // Defense-in-depth: source-tree check on the read path too.
568
+ runSourceTreeChecks(targets, opts.operation, 'git', verb);
569
+ const env = sanitizeEnv(opts.env);
570
+ let stdout;
571
+ try {
572
+ stdout = execFileSync('git', args, {
573
+ cwd: opts.cwd,
574
+ stdio: opts.stdio ?? 'pipe',
575
+ encoding: opts.encoding ?? 'utf-8',
576
+ timeout: opts.timeout ?? 30000,
577
+ env,
578
+ input: opts.input,
579
+ maxBuffer: opts.maxBuffer ?? 10 * 1024 * 1024,
580
+ });
581
+ }
582
+ catch (err) {
583
+ audit('git', opts.operation, verb, targets[0], 'denied', `subprocess-error: ${err.message}`);
584
+ throw err;
585
+ }
586
+ audit('git', opts.operation, verb, targets[0], 'allowed');
587
+ return stdout || '';
588
+ }
589
+ }
590
+ function runSourceTreeChecks(targets, operation, executor, verb) {
591
+ for (const t of targets) {
592
+ try {
593
+ assertNotInstarSourceTree(t, operation);
594
+ }
595
+ catch (err) {
596
+ if (err instanceof SourceTreeGuardError) {
597
+ audit(executor, operation, verb, t, 'denied', err.message);
598
+ }
599
+ throw err;
600
+ }
601
+ }
602
+ }
603
+ function audit(executor, operation, verb, target, outcome, reason) {
604
+ const entry = {
605
+ timestamp: new Date().toISOString(),
606
+ executor,
607
+ operation,
608
+ target,
609
+ outcome,
610
+ caller: captureCallerFrame(),
611
+ };
612
+ if (verb !== undefined)
613
+ entry.verb = verb;
614
+ if (reason !== undefined)
615
+ entry.reason = reason;
616
+ appendAuditEntry(entry);
617
+ }
618
+ // ── Internal helpers exported for tests only ────────────────────────
619
+ /** @internal — exposed for SafeGitExecutor.test.ts */
620
+ export const _internal = {
621
+ extractVerbAndTargets,
622
+ isReadOnlyShape,
623
+ sanitizeEnv,
624
+ GIT_ENV_DENYLIST,
625
+ };
626
+ // Suppress unused-export warnings for the convenience re-exports. The
627
+ // test suite imports these symbols.
628
+ export { SourceTreeGuardError };
629
+ // fileURLToPath import kept available for future use; no current consumers.
630
+ void fileURLToPath;
631
+ //# sourceMappingURL=SafeGitExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SafeGitExecutor.js","sourceRoot":"","sources":["../../src/core/SafeGitExecutor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ScopeVerifier.d.ts","sourceRoot":"","sources":["../../src/core/ScopeVerifier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ScopeVerifier.d.ts","sourceRoot":"","sources":["../../src/core/ScopeVerifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,MAAM,WAAW,uBAAuB;IACtC,qDAAqD;IACrD,MAAM,EAAE,OAAO,CAAC;IAChB,+BAA+B;IAC/B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,cAAc,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IAC7C,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6BAA6B;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,mBAAmB;IAClC,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,8CAA8C;AAC9C,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,UAAU,GACV,cAAc,GACd,6BAA6B,GAC7B,mBAAmB,CAAC;AAExB,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAsB;gBAExB,MAAM,EAAE,mBAAmB;IAIvC;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE;QACtC,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,uBAAuB;IAgD3B;;;OAGG;IACH,wBAAwB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE;QACzD,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,MAAM;IA+DV;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAI5D;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAQpE;;OAEG;IACH,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC;IAcxD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,qBAAqB;IAuB7B,OAAO,CAAC,cAAc;IA8BtB,OAAO,CAAC,0BAA0B;IA+BlC,OAAO,CAAC,qBAAqB;IAiC7B,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,kBAAkB;IA2C1B,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,aAAa;CAGtB"}