@roackb2/heddle 1.0.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/dist/src/cli/ask.d.ts.map +1 -1
  2. package/dist/src/cli/ask.js +11 -1
  3. package/dist/src/cli/ask.js.map +1 -1
  4. package/dist/src/cli/chat/App.d.ts.map +1 -1
  5. package/dist/src/cli/chat/App.js +23 -138
  6. package/dist/src/cli/chat/App.js.map +1 -1
  7. package/dist/src/cli/chat/adapters/slash-command-context.js +1 -1
  8. package/dist/src/cli/chat/adapters/slash-command-context.js.map +1 -1
  9. package/dist/src/cli/chat/hooks/{tui-agent-turn-lifecycle.d.ts → controllers/run/tui-agent-turn-lifecycle.d.ts} +1 -1
  10. package/dist/src/cli/chat/hooks/controllers/run/tui-agent-turn-lifecycle.d.ts.map +1 -0
  11. package/dist/src/cli/chat/hooks/controllers/run/tui-agent-turn-lifecycle.js.map +1 -0
  12. package/dist/src/cli/chat/hooks/{tui-agent-turn-result.d.ts → controllers/run/tui-agent-turn-result.d.ts} +4 -4
  13. package/dist/src/cli/chat/hooks/controllers/run/tui-agent-turn-result.d.ts.map +1 -0
  14. package/dist/src/cli/chat/hooks/{tui-agent-turn-result.js → controllers/run/tui-agent-turn-result.js} +6 -6
  15. package/dist/src/cli/chat/hooks/controllers/run/tui-agent-turn-result.js.map +1 -0
  16. package/dist/src/cli/chat/hooks/{tui-compaction-status.d.ts → controllers/run/tui-compaction-status.d.ts} +4 -4
  17. package/dist/src/cli/chat/hooks/controllers/run/tui-compaction-status.d.ts.map +1 -0
  18. package/dist/src/cli/chat/hooks/{tui-compaction-status.js → controllers/run/tui-compaction-status.js} +1 -1
  19. package/dist/src/cli/chat/hooks/controllers/run/tui-compaction-status.js.map +1 -0
  20. package/dist/src/cli/chat/hooks/{tui-direct-shell-result.d.ts → controllers/run/tui-direct-shell-result.d.ts} +3 -3
  21. package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell-result.d.ts.map +1 -0
  22. package/dist/src/cli/chat/hooks/{tui-direct-shell-result.js → controllers/run/tui-direct-shell-result.js} +3 -3
  23. package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell-result.js.map +1 -0
  24. package/dist/src/cli/chat/hooks/{tui-direct-shell.d.ts → controllers/run/tui-direct-shell.d.ts} +5 -5
  25. package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell.d.ts.map +1 -0
  26. package/dist/src/cli/chat/hooks/{tui-direct-shell.js → controllers/run/tui-direct-shell.js} +9 -8
  27. package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell.js.map +1 -0
  28. package/dist/src/cli/chat/hooks/{tui-drift-observer.d.ts → controllers/run/tui-drift-observer.d.ts} +3 -3
  29. package/dist/src/cli/chat/hooks/controllers/run/tui-drift-observer.d.ts.map +1 -0
  30. package/dist/src/cli/chat/hooks/{tui-drift-observer.js → controllers/run/tui-drift-observer.js} +2 -2
  31. package/dist/src/cli/chat/hooks/controllers/run/tui-drift-observer.js.map +1 -0
  32. package/dist/src/cli/chat/hooks/{tui-ordinary-turn.d.ts → controllers/run/tui-ordinary-turn.d.ts} +5 -5
  33. package/dist/src/cli/chat/hooks/controllers/run/tui-ordinary-turn.d.ts.map +1 -0
  34. package/dist/src/cli/chat/hooks/{tui-ordinary-turn.js → controllers/run/tui-ordinary-turn.js} +2 -2
  35. package/dist/src/cli/chat/hooks/controllers/run/tui-ordinary-turn.js.map +1 -0
  36. package/dist/src/cli/chat/hooks/{tui-run-loop-events.d.ts → controllers/run/tui-run-loop-events.d.ts} +4 -4
  37. package/dist/src/cli/chat/hooks/controllers/run/tui-run-loop-events.d.ts.map +1 -0
  38. package/dist/src/cli/chat/hooks/{tui-run-loop-events.js → controllers/run/tui-run-loop-events.js} +4 -4
  39. package/dist/src/cli/chat/hooks/controllers/run/tui-run-loop-events.js.map +1 -0
  40. package/dist/src/cli/chat/hooks/{tui-tool-approval.d.ts → controllers/run/tui-tool-approval.d.ts} +3 -3
  41. package/dist/src/cli/chat/hooks/controllers/run/tui-tool-approval.d.ts.map +1 -0
  42. package/dist/src/cli/chat/hooks/{tui-tool-approval.js → controllers/run/tui-tool-approval.js} +4 -4
  43. package/dist/src/cli/chat/hooks/controllers/run/tui-tool-approval.js.map +1 -0
  44. package/dist/src/cli/chat/hooks/{useAgentRun.d.ts → controllers/useAgentRunController.d.ts} +9 -9
  45. package/dist/src/cli/chat/hooks/controllers/useAgentRunController.d.ts.map +1 -0
  46. package/dist/src/cli/chat/hooks/{useAgentRun.js → controllers/useAgentRunController.js} +14 -14
  47. package/dist/src/cli/chat/hooks/controllers/useAgentRunController.js.map +1 -0
  48. package/dist/src/cli/chat/hooks/controllers/useChatAppController.d.ts +24 -0
  49. package/dist/src/cli/chat/hooks/controllers/useChatAppController.d.ts.map +1 -0
  50. package/dist/src/cli/chat/hooks/controllers/useChatAppController.js +174 -0
  51. package/dist/src/cli/chat/hooks/controllers/useChatAppController.js.map +1 -0
  52. package/dist/src/cli/chat/hooks/{usePromptSubmission.d.ts → controllers/usePromptSubmissionController.d.ts} +7 -7
  53. package/dist/src/cli/chat/hooks/controllers/usePromptSubmissionController.d.ts.map +1 -0
  54. package/dist/src/cli/chat/hooks/{usePromptSubmission.js → controllers/usePromptSubmissionController.js} +4 -4
  55. package/dist/src/cli/chat/hooks/controllers/usePromptSubmissionController.js.map +1 -0
  56. package/dist/src/cli/chat/hooks/useApprovalFlow.d.ts +1 -1
  57. package/dist/src/cli/chat/hooks/useApprovalFlow.d.ts.map +1 -1
  58. package/dist/src/cli/chat/hooks/useChatSessions.d.ts +3 -2
  59. package/dist/src/cli/chat/hooks/useChatSessions.d.ts.map +1 -1
  60. package/dist/src/cli/chat/hooks/useChatSessions.js +65 -81
  61. package/dist/src/cli/chat/hooks/useChatSessions.js.map +1 -1
  62. package/dist/src/cli/chat/hooks/useChatStatusSummary.d.ts.map +1 -1
  63. package/dist/src/cli/chat/hooks/useChatStatusSummary.js +6 -2
  64. package/dist/src/cli/chat/hooks/useChatStatusSummary.js.map +1 -1
  65. package/dist/src/cli/chat/submit.js +1 -1
  66. package/dist/src/cli/chat/submit.js.map +1 -1
  67. package/dist/src/cli/session.js +1 -1
  68. package/dist/src/cli/session.js.map +1 -1
  69. package/dist/src/core/awareness/domain-prompt.d.ts +3 -0
  70. package/dist/src/core/awareness/domain-prompt.d.ts.map +1 -0
  71. package/dist/src/core/awareness/domain-prompt.js +30 -0
  72. package/dist/src/core/awareness/domain-prompt.js.map +1 -0
  73. package/dist/src/core/awareness/domains/coding/collectors/git.d.ts +9 -0
  74. package/dist/src/core/awareness/domains/coding/collectors/git.d.ts.map +1 -0
  75. package/dist/src/core/awareness/domains/coding/collectors/git.js +257 -0
  76. package/dist/src/core/awareness/domains/coding/collectors/git.js.map +1 -0
  77. package/dist/src/core/awareness/domains/coding/collectors/project-signals.d.ts +12 -0
  78. package/dist/src/core/awareness/domains/coding/collectors/project-signals.d.ts.map +1 -0
  79. package/dist/src/core/awareness/domains/coding/collectors/project-signals.js +187 -0
  80. package/dist/src/core/awareness/domains/coding/collectors/project-signals.js.map +1 -0
  81. package/dist/src/core/awareness/domains/coding/collectors/workspace-tree.d.ts +12 -0
  82. package/dist/src/core/awareness/domains/coding/collectors/workspace-tree.d.ts.map +1 -0
  83. package/dist/src/core/awareness/domains/coding/collectors/workspace-tree.js +126 -0
  84. package/dist/src/core/awareness/domains/coding/collectors/workspace-tree.js.map +1 -0
  85. package/dist/src/core/awareness/domains/coding/collectors/workspace.d.ts +16 -0
  86. package/dist/src/core/awareness/domains/coding/collectors/workspace.d.ts.map +1 -0
  87. package/dist/src/core/awareness/domains/coding/collectors/workspace.js +65 -0
  88. package/dist/src/core/awareness/domains/coding/collectors/workspace.js.map +1 -0
  89. package/dist/src/core/awareness/domains/coding/detectors/go.d.ts +3 -0
  90. package/dist/src/core/awareness/domains/coding/detectors/go.d.ts.map +1 -0
  91. package/dist/src/core/awareness/domains/coding/detectors/go.js +48 -0
  92. package/dist/src/core/awareness/domains/coding/detectors/go.js.map +1 -0
  93. package/dist/src/core/awareness/domains/coding/detectors/javascript.d.ts +3 -0
  94. package/dist/src/core/awareness/domains/coding/detectors/javascript.d.ts.map +1 -0
  95. package/dist/src/core/awareness/domains/coding/detectors/javascript.js +90 -0
  96. package/dist/src/core/awareness/domains/coding/detectors/javascript.js.map +1 -0
  97. package/dist/src/core/awareness/domains/coding/detectors/python.d.ts +3 -0
  98. package/dist/src/core/awareness/domains/coding/detectors/python.d.ts.map +1 -0
  99. package/dist/src/core/awareness/domains/coding/detectors/python.js +79 -0
  100. package/dist/src/core/awareness/domains/coding/detectors/python.js.map +1 -0
  101. package/dist/src/core/awareness/domains/coding/detectors/types.d.ts +18 -0
  102. package/dist/src/core/awareness/domains/coding/detectors/types.d.ts.map +1 -0
  103. package/dist/src/core/awareness/domains/coding/detectors/types.js +2 -0
  104. package/dist/src/core/awareness/domains/coding/detectors/types.js.map +1 -0
  105. package/dist/src/core/awareness/domains/coding/format.d.ts +3 -0
  106. package/dist/src/core/awareness/domains/coding/format.d.ts.map +1 -0
  107. package/dist/src/core/awareness/domains/coding/format.js +28 -0
  108. package/dist/src/core/awareness/domains/coding/format.js.map +1 -0
  109. package/dist/src/core/awareness/domains/coding/provider.d.ts +8 -0
  110. package/dist/src/core/awareness/domains/coding/provider.d.ts.map +1 -0
  111. package/dist/src/core/awareness/domains/coding/provider.js +59 -0
  112. package/dist/src/core/awareness/domains/coding/provider.js.map +1 -0
  113. package/dist/src/core/awareness/domains/coding/types.d.ts +123 -0
  114. package/dist/src/core/awareness/domains/coding/types.d.ts.map +1 -0
  115. package/dist/src/core/awareness/domains/coding/types.js +2 -0
  116. package/dist/src/core/awareness/domains/coding/types.js.map +1 -0
  117. package/dist/src/core/awareness/format.d.ts +7 -0
  118. package/dist/src/core/awareness/format.d.ts.map +1 -0
  119. package/dist/src/core/awareness/format.js +27 -0
  120. package/dist/src/core/awareness/format.js.map +1 -0
  121. package/dist/src/core/awareness/index.d.ts +7 -0
  122. package/dist/src/core/awareness/index.d.ts.map +1 -0
  123. package/dist/src/core/awareness/index.js +5 -0
  124. package/dist/src/core/awareness/index.js.map +1 -0
  125. package/dist/src/core/awareness/service.d.ts +8 -0
  126. package/dist/src/core/awareness/service.d.ts.map +1 -0
  127. package/dist/src/core/awareness/service.js +13 -0
  128. package/dist/src/core/awareness/service.js.map +1 -0
  129. package/dist/src/core/awareness/types.d.ts +37 -0
  130. package/dist/src/core/awareness/types.d.ts.map +1 -0
  131. package/dist/src/core/awareness/types.js +2 -0
  132. package/dist/src/core/awareness/types.js.map +1 -0
  133. package/dist/src/core/chat/engine/sessions/preferences/service.d.ts +23 -0
  134. package/dist/src/core/chat/engine/sessions/preferences/service.d.ts.map +1 -0
  135. package/dist/src/core/chat/engine/sessions/preferences/service.js +29 -0
  136. package/dist/src/core/chat/engine/sessions/preferences/service.js.map +1 -0
  137. package/dist/src/core/chat/engine/sessions/{storage.d.ts → repository/file-chat-session-repository.d.ts} +16 -18
  138. package/dist/src/core/chat/engine/sessions/repository/file-chat-session-repository.d.ts.map +1 -0
  139. package/dist/src/core/chat/engine/sessions/{storage.js → repository/file-chat-session-repository.js} +62 -51
  140. package/dist/src/core/chat/engine/sessions/repository/file-chat-session-repository.js.map +1 -0
  141. package/dist/src/core/chat/engine/sessions/service.d.ts +6 -1
  142. package/dist/src/core/chat/engine/sessions/service.d.ts.map +1 -1
  143. package/dist/src/core/chat/engine/sessions/service.js +95 -13
  144. package/dist/src/core/chat/engine/sessions/service.js.map +1 -1
  145. package/dist/src/core/chat/engine/sessions/session-record.d.ts +15 -0
  146. package/dist/src/core/chat/engine/sessions/session-record.d.ts.map +1 -0
  147. package/dist/src/core/chat/engine/sessions/session-record.js +59 -0
  148. package/dist/src/core/chat/engine/sessions/session-record.js.map +1 -0
  149. package/dist/src/core/chat/engine/turns/context.js +1 -1
  150. package/dist/src/core/chat/engine/turns/context.js.map +1 -1
  151. package/dist/src/core/chat/engine/turns/memory-maintenance.d.ts.map +1 -1
  152. package/dist/src/core/chat/engine/turns/memory-maintenance.js +2 -1
  153. package/dist/src/core/chat/engine/turns/memory-maintenance.js.map +1 -1
  154. package/dist/src/core/chat/engine/turns/persistence.d.ts.map +1 -1
  155. package/dist/src/core/chat/engine/turns/persistence.js +2 -1
  156. package/dist/src/core/chat/engine/turns/persistence.js.map +1 -1
  157. package/dist/src/core/chat/engine/turns/preflight.d.ts.map +1 -1
  158. package/dist/src/core/chat/engine/turns/preflight.js +2 -1
  159. package/dist/src/core/chat/engine/turns/preflight.js.map +1 -1
  160. package/dist/src/core/chat/engine/turns/result.js +1 -1
  161. package/dist/src/core/chat/engine/turns/result.js.map +1 -1
  162. package/dist/src/core/chat/engine/turns/run-conversation-turn.d.ts.map +1 -1
  163. package/dist/src/core/chat/engine/turns/run-conversation-turn.js +2 -1
  164. package/dist/src/core/chat/engine/turns/run-conversation-turn.js.map +1 -1
  165. package/dist/src/core/chat/engine/turns/runtime.d.ts.map +1 -1
  166. package/dist/src/core/chat/engine/turns/runtime.js +3 -2
  167. package/dist/src/core/chat/engine/turns/runtime.js.map +1 -1
  168. package/dist/src/core/chat/engine/turns/service.js +1 -1
  169. package/dist/src/core/chat/engine/turns/service.js.map +1 -1
  170. package/dist/src/core/chat/engine/types.d.ts +1 -0
  171. package/dist/src/core/chat/engine/types.d.ts.map +1 -1
  172. package/dist/src/core/commands/slash/modules/model/model-commands.d.ts.map +1 -1
  173. package/dist/src/core/commands/slash/modules/model/model-commands.js +14 -16
  174. package/dist/src/core/commands/slash/modules/model/model-commands.js.map +1 -1
  175. package/dist/src/core/llm/model-policy.js +4 -4
  176. package/dist/src/core/llm/model-policy.js.map +1 -1
  177. package/dist/src/core/prompts/system-prompt.d.ts.map +1 -1
  178. package/dist/src/core/prompts/system-prompt.js +1 -0
  179. package/dist/src/core/prompts/system-prompt.js.map +1 -1
  180. package/dist/src/core/runtime/default-tools.d.ts.map +1 -1
  181. package/dist/src/core/runtime/default-tools.js +2 -0
  182. package/dist/src/core/runtime/default-tools.js.map +1 -1
  183. package/dist/src/core/tools/toolkits/coding-awareness/project-dashboard.d.ts +7 -0
  184. package/dist/src/core/tools/toolkits/coding-awareness/project-dashboard.d.ts.map +1 -0
  185. package/dist/src/core/tools/toolkits/coding-awareness/project-dashboard.js +111 -0
  186. package/dist/src/core/tools/toolkits/coding-awareness/project-dashboard.js.map +1 -0
  187. package/dist/src/core/tools/toolkits/coding-awareness/toolkit.d.ts +3 -0
  188. package/dist/src/core/tools/toolkits/coding-awareness/toolkit.d.ts.map +1 -0
  189. package/dist/src/core/tools/toolkits/coding-awareness/toolkit.js +10 -0
  190. package/dist/src/core/tools/toolkits/coding-awareness/toolkit.js.map +1 -0
  191. package/dist/src/index.d.ts +2 -0
  192. package/dist/src/index.d.ts.map +1 -1
  193. package/dist/src/index.js +1 -0
  194. package/dist/src/index.js.map +1 -1
  195. package/dist/src/server/features/control-plane/services/chat-sessions.d.ts.map +1 -1
  196. package/dist/src/server/features/control-plane/services/chat-sessions.js +11 -1
  197. package/dist/src/server/features/control-plane/services/chat-sessions.js.map +1 -1
  198. package/dist/src/web/assets/{MonacoDiffViewer-D_2D56lo.js → MonacoDiffViewer-vifX8i2F.js} +1 -1
  199. package/dist/src/web/assets/{index-Du00cqAD.js → index-vEln1ViW.js} +3 -3
  200. package/dist/src/web/index.html +1 -1
  201. package/package.json +2 -1
  202. package/dist/src/cli/chat/hooks/tui-agent-turn-lifecycle.d.ts.map +0 -1
  203. package/dist/src/cli/chat/hooks/tui-agent-turn-lifecycle.js.map +0 -1
  204. package/dist/src/cli/chat/hooks/tui-agent-turn-result.d.ts.map +0 -1
  205. package/dist/src/cli/chat/hooks/tui-agent-turn-result.js.map +0 -1
  206. package/dist/src/cli/chat/hooks/tui-compaction-status.d.ts.map +0 -1
  207. package/dist/src/cli/chat/hooks/tui-compaction-status.js.map +0 -1
  208. package/dist/src/cli/chat/hooks/tui-direct-shell-result.d.ts.map +0 -1
  209. package/dist/src/cli/chat/hooks/tui-direct-shell-result.js.map +0 -1
  210. package/dist/src/cli/chat/hooks/tui-direct-shell.d.ts.map +0 -1
  211. package/dist/src/cli/chat/hooks/tui-direct-shell.js.map +0 -1
  212. package/dist/src/cli/chat/hooks/tui-drift-observer.d.ts.map +0 -1
  213. package/dist/src/cli/chat/hooks/tui-drift-observer.js.map +0 -1
  214. package/dist/src/cli/chat/hooks/tui-ordinary-turn.d.ts.map +0 -1
  215. package/dist/src/cli/chat/hooks/tui-ordinary-turn.js.map +0 -1
  216. package/dist/src/cli/chat/hooks/tui-run-loop-events.d.ts.map +0 -1
  217. package/dist/src/cli/chat/hooks/tui-run-loop-events.js.map +0 -1
  218. package/dist/src/cli/chat/hooks/tui-tool-approval.d.ts.map +0 -1
  219. package/dist/src/cli/chat/hooks/tui-tool-approval.js.map +0 -1
  220. package/dist/src/cli/chat/hooks/useAgentRun.d.ts.map +0 -1
  221. package/dist/src/cli/chat/hooks/useAgentRun.js.map +0 -1
  222. package/dist/src/cli/chat/hooks/usePromptSubmission.d.ts.map +0 -1
  223. package/dist/src/cli/chat/hooks/usePromptSubmission.js.map +0 -1
  224. package/dist/src/cli/chat/state/storage.d.ts +0 -2
  225. package/dist/src/cli/chat/state/storage.d.ts.map +0 -1
  226. package/dist/src/cli/chat/state/storage.js +0 -2
  227. package/dist/src/cli/chat/state/storage.js.map +0 -1
  228. package/dist/src/core/chat/engine/sessions/storage.d.ts.map +0 -1
  229. package/dist/src/core/chat/engine/sessions/storage.js.map +0 -1
  230. /package/dist/src/cli/chat/hooks/{tui-agent-turn-lifecycle.js → controllers/run/tui-agent-turn-lifecycle.js} +0 -0
@@ -0,0 +1,257 @@
1
+ import { execFile } from 'node:child_process';
2
+ export async function collectGitWorkingEnvironment(workspaceRoot) {
3
+ const sources = [];
4
+ const limits = [];
5
+ const insideWorkTree = await runGit(workspaceRoot, ['rev-parse', '--is-inside-work-tree']);
6
+ sources.push({ kind: 'git', command: 'git rev-parse --is-inside-work-tree' });
7
+ if (insideWorkTree.exitCode !== 0 || insideWorkTree.stdout.trim() !== 'true') {
8
+ limits.push({
9
+ kind: 'not_applicable',
10
+ subject: 'git',
11
+ detail: 'Workspace is not inside a git work tree.',
12
+ });
13
+ return {
14
+ environment: createNonGitEnvironment(),
15
+ sources,
16
+ limits,
17
+ };
18
+ }
19
+ const [repoRootResult, branchResult, commitResult, statusResult] = await Promise.all([
20
+ runGit(workspaceRoot, ['rev-parse', '--show-toplevel']),
21
+ runGit(workspaceRoot, ['branch', '--show-current']),
22
+ runGit(workspaceRoot, ['rev-parse', '--short', 'HEAD']),
23
+ runGit(workspaceRoot, ['status', '--porcelain=v1', '-z', '--untracked-files=all']),
24
+ ]);
25
+ sources.push({ kind: 'git', command: 'git rev-parse --show-toplevel' }, { kind: 'git', command: 'git branch --show-current' }, { kind: 'git', command: 'git rev-parse --short HEAD' }, { kind: 'git', command: 'git status --porcelain=v1 -z --untracked-files=all' });
26
+ if (repoRootResult.exitCode !== 0) {
27
+ limits.push({
28
+ kind: 'unavailable',
29
+ subject: 'git repository root',
30
+ detail: normalizeError(repoRootResult.stderr) ?? 'Unable to resolve git repository root.',
31
+ });
32
+ }
33
+ if (branchResult.exitCode !== 0) {
34
+ limits.push({
35
+ kind: 'unavailable',
36
+ subject: 'git branch',
37
+ detail: normalizeError(branchResult.stderr) ?? 'Unable to resolve current git branch.',
38
+ });
39
+ }
40
+ if (commitResult.exitCode !== 0) {
41
+ limits.push({
42
+ kind: 'unavailable',
43
+ subject: 'git commit',
44
+ detail: normalizeError(commitResult.stderr) ?? 'Unable to resolve current git commit.',
45
+ });
46
+ }
47
+ if (statusResult.exitCode !== 0) {
48
+ limits.push({
49
+ kind: 'unavailable',
50
+ subject: 'git status',
51
+ detail: normalizeError(statusResult.stderr) ?? 'Unable to resolve git working tree status.',
52
+ });
53
+ }
54
+ const parsedStatus = statusResult.exitCode === 0 ? parsePorcelainStatus(statusResult.stdout) : [];
55
+ const groupedStatus = groupPaths(parsedStatus);
56
+ const boundedStatus = applyPathLimits(groupedStatus.paths);
57
+ const paths = boundedStatus.paths;
58
+ const hasVisibleChanges = paths.staged.length > 0 ||
59
+ paths.modified.length > 0 ||
60
+ paths.deleted.length > 0 ||
61
+ paths.untracked.length > 0 ||
62
+ paths.renamed.length > 0;
63
+ const hasOmittedChanges = groupedStatus.omittedCount > 0;
64
+ const isDirty = hasVisibleChanges || hasOmittedChanges;
65
+ if (groupedStatus.omittedCount > 0) {
66
+ limits.push({
67
+ kind: 'omitted',
68
+ subject: 'git working tree paths',
69
+ detail: `Omitted ${groupedStatus.omittedCount} runtime or dependency path entries such as .heddle, .git, node_modules, dist, coverage, and cache folders.`,
70
+ });
71
+ }
72
+ limits.push(...boundedStatus.limits);
73
+ return {
74
+ environment: {
75
+ gitRepositoryRoot: repoRootResult.exitCode === 0 ? repoRootResult.stdout.trim() || undefined : undefined,
76
+ gitBranch: branchResult.exitCode === 0 ? branchResult.stdout.trim() || undefined : undefined,
77
+ gitShortCommit: commitResult.exitCode === 0 ? commitResult.stdout.trim() || undefined : undefined,
78
+ isGitRepository: true,
79
+ isDirty,
80
+ paths,
81
+ },
82
+ sources,
83
+ limits,
84
+ };
85
+ }
86
+ function createNonGitEnvironment() {
87
+ return {
88
+ isGitRepository: false,
89
+ isDirty: false,
90
+ paths: {
91
+ staged: [],
92
+ modified: [],
93
+ deleted: [],
94
+ untracked: [],
95
+ renamed: [],
96
+ },
97
+ };
98
+ }
99
+ function groupPaths(entries) {
100
+ const staged = new Set();
101
+ const modified = new Set();
102
+ const deleted = new Set();
103
+ const untracked = new Set();
104
+ const renamed = new Map();
105
+ let omittedCount = 0;
106
+ for (const entry of entries) {
107
+ if (isNoisePath(entry.path) || (entry.oldPath && isNoisePath(entry.oldPath))) {
108
+ omittedCount += 1;
109
+ continue;
110
+ }
111
+ if (entry.indexStatus === '?' && entry.workingTreeStatus === '?') {
112
+ untracked.add(entry.path);
113
+ continue;
114
+ }
115
+ if (entry.indexStatus === 'R' && entry.oldPath) {
116
+ renamed.set(entry.oldPath, entry.path);
117
+ }
118
+ if (entry.indexStatus !== ' ' && entry.indexStatus !== '?' && entry.indexStatus !== 'D' && entry.indexStatus !== 'R') {
119
+ staged.add(entry.path);
120
+ }
121
+ if (entry.workingTreeStatus === 'M') {
122
+ modified.add(entry.path);
123
+ }
124
+ if (entry.indexStatus === 'D' || entry.workingTreeStatus === 'D') {
125
+ deleted.add(entry.path);
126
+ }
127
+ if (entry.indexStatus === 'M') {
128
+ staged.add(entry.path);
129
+ }
130
+ if (entry.indexStatus === 'A') {
131
+ staged.add(entry.path);
132
+ }
133
+ }
134
+ for (const deletedPath of deleted) {
135
+ staged.delete(deletedPath);
136
+ modified.delete(deletedPath);
137
+ }
138
+ return {
139
+ paths: {
140
+ staged: [...staged].sort(),
141
+ modified: [...modified].sort(),
142
+ deleted: [...deleted].sort(),
143
+ untracked: [...untracked].sort(),
144
+ renamed: [...renamed.entries()].sort(([left], [right]) => left.localeCompare(right)).map(([from, to]) => ({ from, to })),
145
+ },
146
+ omittedCount,
147
+ };
148
+ }
149
+ function isNoisePath(path) {
150
+ const segments = path.split('/').filter(Boolean);
151
+ return segments.some((segment) => OMITTED_PATH_SEGMENTS.has(segment));
152
+ }
153
+ export const OMITTED_PATH_SEGMENTS = new Set([
154
+ '.git',
155
+ '.heddle',
156
+ 'node_modules',
157
+ 'dist',
158
+ 'coverage',
159
+ 'build',
160
+ '.next',
161
+ '.turbo',
162
+ '.cache',
163
+ 'test-results',
164
+ ]);
165
+ const MAX_PATHS_PER_GROUP = 20;
166
+ function applyPathLimits(paths) {
167
+ const limits = [];
168
+ const staged = truncatePathGroup(paths.staged, 'staged paths', limits);
169
+ const modified = truncatePathGroup(paths.modified, 'modified paths', limits);
170
+ const deleted = truncatePathGroup(paths.deleted, 'deleted paths', limits);
171
+ const untracked = truncatePathGroup(paths.untracked, 'untracked paths', limits);
172
+ const renamed = truncateRenamedGroup(paths.renamed, limits);
173
+ return {
174
+ paths: {
175
+ staged,
176
+ modified,
177
+ deleted,
178
+ untracked,
179
+ renamed,
180
+ },
181
+ limits,
182
+ };
183
+ }
184
+ function truncatePathGroup(paths, subject, limits) {
185
+ if (paths.length <= MAX_PATHS_PER_GROUP) {
186
+ return paths;
187
+ }
188
+ const omittedCount = paths.length - MAX_PATHS_PER_GROUP;
189
+ limits.push({
190
+ kind: 'truncated',
191
+ subject,
192
+ detail: `Showing ${MAX_PATHS_PER_GROUP} of ${paths.length} entries; ${omittedCount} more omitted from the summary.`,
193
+ });
194
+ return paths.slice(0, MAX_PATHS_PER_GROUP);
195
+ }
196
+ function truncateRenamedGroup(paths, limits) {
197
+ if (paths.length <= MAX_PATHS_PER_GROUP) {
198
+ return paths;
199
+ }
200
+ const omittedCount = paths.length - MAX_PATHS_PER_GROUP;
201
+ limits.push({
202
+ kind: 'truncated',
203
+ subject: 'renamed paths',
204
+ detail: `Showing ${MAX_PATHS_PER_GROUP} of ${paths.length} entries; ${omittedCount} more omitted from the summary.`,
205
+ });
206
+ return paths.slice(0, MAX_PATHS_PER_GROUP);
207
+ }
208
+ function parsePorcelainStatus(stdout) {
209
+ const parts = stdout.split('\0').filter(Boolean);
210
+ const entries = [];
211
+ for (let index = 0; index < parts.length; index += 1) {
212
+ const raw = parts[index] ?? '';
213
+ if (raw.length < 4) {
214
+ continue;
215
+ }
216
+ const indexStatus = raw[0] ?? ' ';
217
+ const workingTreeStatus = raw[1] ?? ' ';
218
+ const path = raw.slice(3);
219
+ if (!path) {
220
+ continue;
221
+ }
222
+ if ((indexStatus === 'R' || indexStatus === 'C') && parts[index + 1]) {
223
+ entries.push({
224
+ path,
225
+ oldPath: parts[index + 1],
226
+ indexStatus,
227
+ workingTreeStatus,
228
+ });
229
+ index += 1;
230
+ continue;
231
+ }
232
+ entries.push({ path, oldPath: undefined, indexStatus, workingTreeStatus });
233
+ }
234
+ return entries;
235
+ }
236
+ function normalizeError(stderr) {
237
+ const trimmed = stderr.trim();
238
+ return trimmed || undefined;
239
+ }
240
+ function runGit(cwd, args) {
241
+ return new Promise((resolveResult) => {
242
+ execFile('git', args, {
243
+ cwd,
244
+ maxBuffer: 10 * 1024 * 1024,
245
+ }, (error, stdout, stderr) => {
246
+ const code = typeof error?.code === 'number'
247
+ ? error.code
248
+ : error ? 1 : 0;
249
+ resolveResult({
250
+ exitCode: code,
251
+ stdout: stdout.toString(),
252
+ stderr: stderr.toString(),
253
+ });
254
+ });
255
+ });
256
+ }
257
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../../../../../src/core/awareness/domains/coding/collectors/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { AwarenessLimit, AwarenessSource } from '../../../types.js';
2
+ import type { CodingInspectionSurface, CodingProjectSignals, CodingWorkingEnvironment } from '../types.js';
3
+ export declare function collectCodingProjectSignals(input: {
4
+ workspaceRoot: string;
5
+ environment: CodingWorkingEnvironment;
6
+ }): Promise<{
7
+ projectSignals: CodingProjectSignals;
8
+ inspectionSurfaces: CodingInspectionSurface[];
9
+ sources: AwarenessSource[];
10
+ limits: AwarenessLimit[];
11
+ }>;
12
+ //# sourceMappingURL=project-signals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-signals.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/awareness/domains/coding/collectors/project-signals.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,aAAa,CAAC;AAyBrB,wBAAsB,2BAA2B,CAAC,KAAK,EAAE;IACvD,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,wBAAwB,CAAC;CACvC,GAAG,OAAO,CAAC;IACV,cAAc,EAAE,oBAAoB,CAAC;IACrC,kBAAkB,EAAE,uBAAuB,EAAE,CAAC;IAC9C,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B,CAAC,CAkFD"}
@@ -0,0 +1,187 @@
1
+ import { readdir, readFile } from 'node:fs/promises';
2
+ import { goProjectDetector } from '../detectors/go.js';
3
+ import { javascriptProjectDetector } from '../detectors/javascript.js';
4
+ import { pythonProjectDetector } from '../detectors/python.js';
5
+ import { OMITTED_PATH_SEGMENTS } from './git.js';
6
+ const DIRECTORY_ROLES = {
7
+ source: ['src', 'lib', 'app', 'cmd', 'internal', 'pkg'],
8
+ tests: ['test', 'tests', '__tests__'],
9
+ docs: ['docs'],
10
+ examples: ['examples'],
11
+ scripts: ['scripts'],
12
+ config: ['config', '.github'],
13
+ };
14
+ const SUPPORTED_PROJECT_DETECTORS = [
15
+ javascriptProjectDetector,
16
+ pythonProjectDetector,
17
+ goProjectDetector,
18
+ ];
19
+ export async function collectCodingProjectSignals(input) {
20
+ const sources = [];
21
+ const limits = [];
22
+ const observedDirectories = {
23
+ source: [],
24
+ tests: [],
25
+ docs: [],
26
+ examples: [],
27
+ scripts: [],
28
+ config: [],
29
+ };
30
+ let dirents;
31
+ try {
32
+ dirents = await readdir(input.workspaceRoot, { withFileTypes: true });
33
+ }
34
+ catch (error) {
35
+ limits.push({
36
+ kind: 'unavailable',
37
+ subject: 'project signals',
38
+ detail: `Could not read workspace root entries: ${error instanceof Error ? error.message : String(error)}`,
39
+ });
40
+ return {
41
+ projectSignals: {
42
+ detectedProjects: [],
43
+ observedDirectories,
44
+ configFiles: [],
45
+ },
46
+ inspectionSurfaces: buildInspectionSurfaces({
47
+ projectSignals: {
48
+ detectedProjects: [],
49
+ observedDirectories,
50
+ configFiles: [],
51
+ },
52
+ environment: input.environment,
53
+ }),
54
+ sources,
55
+ limits,
56
+ };
57
+ }
58
+ const visibleDirents = dirents.filter((dirent) => !OMITTED_PATH_SEGMENTS.has(dirent.name));
59
+ const rootEntries = visibleDirents.map((dirent) => dirent.name).sort();
60
+ for (const dirent of visibleDirents) {
61
+ if (!dirent.isDirectory()) {
62
+ continue;
63
+ }
64
+ for (const [role, names] of Object.entries(DIRECTORY_ROLES)) {
65
+ if (names.includes(dirent.name)) {
66
+ observedDirectories[role].push(dirent.name);
67
+ }
68
+ }
69
+ }
70
+ const detectorInput = {
71
+ workspaceRoot: input.workspaceRoot,
72
+ rootEntries,
73
+ readText: (relativePath) => readWorkspaceText(input.workspaceRoot, relativePath),
74
+ };
75
+ const contributions = (await Promise.all(SUPPORTED_PROJECT_DETECTORS.map((detector) => detector.detect(detectorInput)))).filter((value) => value !== null);
76
+ const projectSignals = mergeProjectSignals(contributions, observedDirectories);
77
+ for (const contribution of contributions) {
78
+ sources.push(...contribution.sources);
79
+ limits.push(...contribution.limits);
80
+ }
81
+ return {
82
+ projectSignals,
83
+ inspectionSurfaces: buildInspectionSurfaces({
84
+ projectSignals,
85
+ environment: input.environment,
86
+ }),
87
+ sources: dedupeSources(sources),
88
+ limits,
89
+ };
90
+ }
91
+ async function readWorkspaceText(workspaceRoot, relativePath) {
92
+ try {
93
+ return await readFile(`${workspaceRoot}/${relativePath}`, 'utf8');
94
+ }
95
+ catch {
96
+ return undefined;
97
+ }
98
+ }
99
+ function mergeProjectSignals(contributions, observedDirectories) {
100
+ const detectedProjects = new Map();
101
+ const configFiles = new Set();
102
+ for (const contribution of contributions) {
103
+ detectedProjects.set(contribution.project.kind, contribution.project);
104
+ for (const configFile of contribution.configFiles) {
105
+ configFiles.add(configFile);
106
+ }
107
+ }
108
+ const normalizedObservedDirectories = normalizeObservedDirectories(observedDirectories);
109
+ return {
110
+ detectedProjects: [...detectedProjects.values()].sort((left, right) => left.kind.localeCompare(right.kind)),
111
+ observedDirectories: normalizedObservedDirectories,
112
+ configFiles: [...configFiles].sort(),
113
+ };
114
+ }
115
+ function buildInspectionSurfaces(args) {
116
+ const surfaces = [];
117
+ const manifestPaths = args.projectSignals.detectedProjects
118
+ .flatMap((project) => project.manifests.map((manifest) => manifest.path));
119
+ if (manifestPaths.length > 0) {
120
+ surfaces.push({
121
+ kind: 'manifest',
122
+ paths: manifestPaths.sort(),
123
+ });
124
+ }
125
+ for (const [role, paths] of Object.entries(args.projectSignals.observedDirectories)) {
126
+ if (paths.length === 0) {
127
+ continue;
128
+ }
129
+ surfaces.push({
130
+ kind: 'directory',
131
+ role,
132
+ paths,
133
+ });
134
+ }
135
+ if (args.projectSignals.configFiles.length > 0) {
136
+ surfaces.push({
137
+ kind: 'config_file',
138
+ paths: args.projectSignals.configFiles,
139
+ });
140
+ }
141
+ const verificationLabels = args.projectSignals.detectedProjects
142
+ .flatMap((project) => project.verificationSurfaces.map((surface) => surface.label));
143
+ if (verificationLabels.length > 0) {
144
+ surfaces.push({
145
+ kind: 'verification_surface',
146
+ labels: verificationLabels.sort(),
147
+ });
148
+ }
149
+ const dirtyCounts = {
150
+ staged: args.environment.paths.staged.length,
151
+ modified: args.environment.paths.modified.length,
152
+ deleted: args.environment.paths.deleted.length,
153
+ untracked: args.environment.paths.untracked.length,
154
+ renamed: args.environment.paths.renamed.length,
155
+ };
156
+ if (Object.values(dirtyCounts).some((count) => count > 0)) {
157
+ surfaces.push({
158
+ kind: 'dirty_paths',
159
+ counts: dirtyCounts,
160
+ });
161
+ }
162
+ return surfaces;
163
+ }
164
+ function dedupeSources(sources) {
165
+ const seen = new Set();
166
+ const deduped = [];
167
+ for (const source of sources) {
168
+ const key = `${source.kind}|${source.command ?? ''}|${source.path ?? ''}|${source.note ?? ''}`;
169
+ if (seen.has(key)) {
170
+ continue;
171
+ }
172
+ seen.add(key);
173
+ deduped.push(source);
174
+ }
175
+ return deduped;
176
+ }
177
+ function normalizeObservedDirectories(observedDirectories) {
178
+ return {
179
+ source: [...observedDirectories.source].sort(),
180
+ tests: [...observedDirectories.tests].sort(),
181
+ docs: [...observedDirectories.docs].sort(),
182
+ examples: [...observedDirectories.examples].sort(),
183
+ scripts: [...observedDirectories.scripts].sort(),
184
+ config: [...observedDirectories.config].sort(),
185
+ };
186
+ }
187
+ //# sourceMappingURL=project-signals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-signals.js","sourceRoot":"","sources":["../../../../../../../src/core/awareness/domains/coding/collectors/project-signals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { AwarenessLimit, AwarenessSource } from '../../../types.js';
2
+ import type { CodingWorkspaceTree } from '../types.js';
3
+ export declare function collectCodingWorkspaceTree(input: {
4
+ workspaceRoot: string;
5
+ maxDepth?: number;
6
+ maxEntries?: number;
7
+ }): Promise<{
8
+ tree: CodingWorkspaceTree;
9
+ sources: AwarenessSource[];
10
+ limits: AwarenessLimit[];
11
+ }>;
12
+ //# sourceMappingURL=workspace-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-tree.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/awareness/domains/coding/collectors/workspace-tree.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAA4B,MAAM,aAAa,CAAC;AAMjF,wBAAsB,0BAA0B,CAAC,KAAK,EAAE;IACtD,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC;IACV,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B,CAAC,CA4DD"}
@@ -0,0 +1,126 @@
1
+ import { readdir } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { OMITTED_PATH_SEGMENTS } from './git.js';
4
+ const DEFAULT_MAX_DEPTH = 2;
5
+ const DEFAULT_MAX_ENTRIES = 60;
6
+ export async function collectCodingWorkspaceTree(input) {
7
+ const maxDepth = input.maxDepth ?? DEFAULT_MAX_DEPTH;
8
+ const maxEntries = input.maxEntries ?? DEFAULT_MAX_ENTRIES;
9
+ const sources = [{
10
+ kind: 'filesystem',
11
+ path: input.workspaceRoot,
12
+ note: 'workspace tree',
13
+ }];
14
+ const limits = [];
15
+ const state = {
16
+ visitedEntries: 0,
17
+ omittedNoise: 0,
18
+ omittedByDepth: 0,
19
+ truncatedByEntryBudget: false,
20
+ };
21
+ const entries = await readTree({
22
+ absoluteRoot: input.workspaceRoot,
23
+ relativeRoot: '',
24
+ depth: 1,
25
+ maxDepth,
26
+ maxEntries,
27
+ state,
28
+ });
29
+ if (state.omittedNoise > 0) {
30
+ limits.push({
31
+ kind: 'omitted',
32
+ subject: 'workspace tree',
33
+ detail: `Omitted ${state.omittedNoise} runtime or dependency entries such as .git, .heddle, node_modules, dist, coverage, build, and cache folders.`,
34
+ });
35
+ }
36
+ if (state.omittedByDepth > 0) {
37
+ limits.push({
38
+ kind: 'truncated',
39
+ subject: 'workspace tree depth',
40
+ detail: `Stopped descending into ${state.omittedByDepth} director${state.omittedByDepth === 1 ? 'y' : 'ies'} at depth ${maxDepth}.`,
41
+ });
42
+ }
43
+ if (state.truncatedByEntryBudget) {
44
+ limits.push({
45
+ kind: 'truncated',
46
+ subject: 'workspace tree entries',
47
+ detail: `Showing at most ${maxEntries} entries across the tree; additional entries were omitted.`,
48
+ });
49
+ }
50
+ return {
51
+ tree: {
52
+ root: input.workspaceRoot,
53
+ maxDepth,
54
+ maxEntries,
55
+ entries,
56
+ },
57
+ sources,
58
+ limits,
59
+ };
60
+ }
61
+ async function readTree(args) {
62
+ let dirents;
63
+ try {
64
+ dirents = await readdir(args.absoluteRoot, { withFileTypes: true });
65
+ }
66
+ catch {
67
+ return [];
68
+ }
69
+ const visibleDirents = dirents
70
+ .filter((dirent) => {
71
+ if (OMITTED_PATH_SEGMENTS.has(dirent.name)) {
72
+ args.state.omittedNoise += 1;
73
+ return false;
74
+ }
75
+ return true;
76
+ })
77
+ .sort((left, right) => {
78
+ if (left.isDirectory() !== right.isDirectory()) {
79
+ return left.isDirectory() ? -1 : 1;
80
+ }
81
+ return left.name.localeCompare(right.name);
82
+ });
83
+ const entries = [];
84
+ for (const dirent of visibleDirents) {
85
+ if (args.state.visitedEntries >= args.maxEntries) {
86
+ args.state.truncatedByEntryBudget = true;
87
+ break;
88
+ }
89
+ const path = args.relativeRoot ? `${args.relativeRoot}/${dirent.name}` : dirent.name;
90
+ args.state.visitedEntries += 1;
91
+ if (dirent.isDirectory()) {
92
+ const node = {
93
+ path,
94
+ kind: 'directory',
95
+ };
96
+ if (args.depth >= args.maxDepth) {
97
+ node.truncated = true;
98
+ args.state.omittedByDepth += 1;
99
+ }
100
+ else if (!args.state.truncatedByEntryBudget) {
101
+ const children = await readTree({
102
+ absoluteRoot: join(args.absoluteRoot, dirent.name),
103
+ relativeRoot: path,
104
+ depth: args.depth + 1,
105
+ maxDepth: args.maxDepth,
106
+ maxEntries: args.maxEntries,
107
+ state: args.state,
108
+ });
109
+ if (children.length > 0) {
110
+ node.children = children;
111
+ }
112
+ if (args.state.truncatedByEntryBudget) {
113
+ node.truncated = true;
114
+ }
115
+ }
116
+ entries.push(node);
117
+ continue;
118
+ }
119
+ entries.push({
120
+ path,
121
+ kind: 'file',
122
+ });
123
+ }
124
+ return entries;
125
+ }
126
+ //# sourceMappingURL=workspace-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-tree.js","sourceRoot":"","sources":["../../../../../../../src/core/awareness/domains/coding/collectors/workspace-tree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { AwarenessCollectInput, AwarenessLimit, AwarenessSource } from '../../../types.js';
2
+ import type { CodingInspectionSurface, CodingProjectSignals, CodingWorkingEnvironment, CodingWorkspaceTree } from '../types.js';
3
+ export declare function collectCodingWorkingEnvironment(input: AwarenessCollectInput): Promise<{
4
+ environment: CodingWorkingEnvironment;
5
+ sources: AwarenessSource[];
6
+ limits: AwarenessLimit[];
7
+ }>;
8
+ export declare function collectCodingProjectDashboard(input: AwarenessCollectInput): Promise<{
9
+ environment: CodingWorkingEnvironment;
10
+ workspaceTree: CodingWorkspaceTree;
11
+ projectSignals: CodingProjectSignals;
12
+ inspectionSurfaces: CodingInspectionSurface[];
13
+ sources: AwarenessSource[];
14
+ limits: AwarenessLimit[];
15
+ }>;
16
+ //# sourceMappingURL=workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/awareness/domains/coding/collectors/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAChG,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAKrB,wBAAsB,+BAA+B,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC;IAC3F,WAAW,EAAE,wBAAwB,CAAC;IACtC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B,CAAC,CAyBD;AAED,wBAAsB,6BAA6B,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC;IACzF,WAAW,EAAE,wBAAwB,CAAC;IACtC,aAAa,EAAE,mBAAmB,CAAC;IACnC,cAAc,EAAE,oBAAoB,CAAC;IACrC,kBAAkB,EAAE,uBAAuB,EAAE,CAAC;IAC9C,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B,CAAC,CAsBD"}