@roackb2/heddle 1.0.3 → 1.1.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 (88) hide show
  1. package/dist/src/cli/chat/App.d.ts.map +1 -1
  2. package/dist/src/cli/chat/App.js +65 -48
  3. package/dist/src/cli/chat/App.js.map +1 -1
  4. package/dist/src/cli/chat/hooks/useChatSessions.d.ts +3 -2
  5. package/dist/src/cli/chat/hooks/useChatSessions.d.ts.map +1 -1
  6. package/dist/src/cli/chat/hooks/useChatSessions.js +23 -11
  7. package/dist/src/cli/chat/hooks/useChatSessions.js.map +1 -1
  8. package/dist/src/cli/chat/hooks/useChatStatusSummary.d.ts.map +1 -1
  9. package/dist/src/cli/chat/hooks/useChatStatusSummary.js +6 -2
  10. package/dist/src/cli/chat/hooks/useChatStatusSummary.js.map +1 -1
  11. package/dist/src/core/awareness/domain-prompt.d.ts +3 -0
  12. package/dist/src/core/awareness/domain-prompt.d.ts.map +1 -0
  13. package/dist/src/core/awareness/domain-prompt.js +30 -0
  14. package/dist/src/core/awareness/domain-prompt.js.map +1 -0
  15. package/dist/src/core/awareness/domains/coding/collectors/git.d.ts +9 -0
  16. package/dist/src/core/awareness/domains/coding/collectors/git.d.ts.map +1 -0
  17. package/dist/src/core/awareness/domains/coding/collectors/git.js +257 -0
  18. package/dist/src/core/awareness/domains/coding/collectors/git.js.map +1 -0
  19. package/dist/src/core/awareness/domains/coding/collectors/workspace-tree.d.ts +12 -0
  20. package/dist/src/core/awareness/domains/coding/collectors/workspace-tree.d.ts.map +1 -0
  21. package/dist/src/core/awareness/domains/coding/collectors/workspace-tree.js +126 -0
  22. package/dist/src/core/awareness/domains/coding/collectors/workspace-tree.js.map +1 -0
  23. package/dist/src/core/awareness/domains/coding/collectors/workspace.d.ts +14 -0
  24. package/dist/src/core/awareness/domains/coding/collectors/workspace.d.ts.map +1 -0
  25. package/dist/src/core/awareness/domains/coding/collectors/workspace.js +56 -0
  26. package/dist/src/core/awareness/domains/coding/collectors/workspace.js.map +1 -0
  27. package/dist/src/core/awareness/domains/coding/format.d.ts +3 -0
  28. package/dist/src/core/awareness/domains/coding/format.d.ts.map +1 -0
  29. package/dist/src/core/awareness/domains/coding/format.js +22 -0
  30. package/dist/src/core/awareness/domains/coding/format.js.map +1 -0
  31. package/dist/src/core/awareness/domains/coding/provider.d.ts +8 -0
  32. package/dist/src/core/awareness/domains/coding/provider.d.ts.map +1 -0
  33. package/dist/src/core/awareness/domains/coding/provider.js +42 -0
  34. package/dist/src/core/awareness/domains/coding/provider.js.map +1 -0
  35. package/dist/src/core/awareness/domains/coding/types.d.ts +56 -0
  36. package/dist/src/core/awareness/domains/coding/types.d.ts.map +1 -0
  37. package/dist/src/core/awareness/domains/coding/types.js +2 -0
  38. package/dist/src/core/awareness/domains/coding/types.js.map +1 -0
  39. package/dist/src/core/awareness/format.d.ts +7 -0
  40. package/dist/src/core/awareness/format.d.ts.map +1 -0
  41. package/dist/src/core/awareness/format.js +27 -0
  42. package/dist/src/core/awareness/format.js.map +1 -0
  43. package/dist/src/core/awareness/index.d.ts +7 -0
  44. package/dist/src/core/awareness/index.d.ts.map +1 -0
  45. package/dist/src/core/awareness/index.js +5 -0
  46. package/dist/src/core/awareness/index.js.map +1 -0
  47. package/dist/src/core/awareness/service.d.ts +8 -0
  48. package/dist/src/core/awareness/service.d.ts.map +1 -0
  49. package/dist/src/core/awareness/service.js +13 -0
  50. package/dist/src/core/awareness/service.js.map +1 -0
  51. package/dist/src/core/awareness/types.d.ts +37 -0
  52. package/dist/src/core/awareness/types.d.ts.map +1 -0
  53. package/dist/src/core/awareness/types.js +2 -0
  54. package/dist/src/core/awareness/types.js.map +1 -0
  55. package/dist/src/core/chat/engine/sessions/preferences/service.d.ts +23 -0
  56. package/dist/src/core/chat/engine/sessions/preferences/service.d.ts.map +1 -0
  57. package/dist/src/core/chat/engine/sessions/preferences/service.js +29 -0
  58. package/dist/src/core/chat/engine/sessions/preferences/service.js.map +1 -0
  59. package/dist/src/core/chat/engine/turns/runtime.d.ts.map +1 -1
  60. package/dist/src/core/chat/engine/turns/runtime.js +3 -2
  61. package/dist/src/core/chat/engine/turns/runtime.js.map +1 -1
  62. package/dist/src/core/commands/slash/modules/model/model-commands.d.ts.map +1 -1
  63. package/dist/src/core/commands/slash/modules/model/model-commands.js +14 -16
  64. package/dist/src/core/commands/slash/modules/model/model-commands.js.map +1 -1
  65. package/dist/src/core/llm/model-policy.js +4 -4
  66. package/dist/src/core/llm/model-policy.js.map +1 -1
  67. package/dist/src/core/prompts/system-prompt.d.ts.map +1 -1
  68. package/dist/src/core/prompts/system-prompt.js +1 -0
  69. package/dist/src/core/prompts/system-prompt.js.map +1 -1
  70. package/dist/src/core/runtime/default-tools.d.ts.map +1 -1
  71. package/dist/src/core/runtime/default-tools.js +2 -0
  72. package/dist/src/core/runtime/default-tools.js.map +1 -1
  73. package/dist/src/core/tools/toolkits/coding-awareness/project-dashboard.d.ts +7 -0
  74. package/dist/src/core/tools/toolkits/coding-awareness/project-dashboard.d.ts.map +1 -0
  75. package/dist/src/core/tools/toolkits/coding-awareness/project-dashboard.js +106 -0
  76. package/dist/src/core/tools/toolkits/coding-awareness/project-dashboard.js.map +1 -0
  77. package/dist/src/core/tools/toolkits/coding-awareness/toolkit.d.ts +3 -0
  78. package/dist/src/core/tools/toolkits/coding-awareness/toolkit.d.ts.map +1 -0
  79. package/dist/src/core/tools/toolkits/coding-awareness/toolkit.js +10 -0
  80. package/dist/src/core/tools/toolkits/coding-awareness/toolkit.js.map +1 -0
  81. package/dist/src/index.d.ts +2 -0
  82. package/dist/src/index.d.ts.map +1 -1
  83. package/dist/src/index.js +1 -0
  84. package/dist/src/index.js.map +1 -1
  85. package/dist/src/web/assets/{MonacoDiffViewer-D_2D56lo.js → MonacoDiffViewer-vifX8i2F.js} +1 -1
  86. package/dist/src/web/assets/{index-Du00cqAD.js → index-vEln1ViW.js} +3 -3
  87. package/dist/src/web/index.html +1 -1
  88. package/package.json +2 -1
@@ -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 { 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,14 @@
1
+ import type { AwarenessCollectInput, AwarenessLimit, AwarenessSource } from '../../../types.js';
2
+ import type { 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
+ sources: AwarenessSource[];
12
+ limits: AwarenessLimit[];
13
+ }>;
14
+ //# 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,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIjF,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,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B,CAAC,CAgBD"}
@@ -0,0 +1,56 @@
1
+ import { collectGitWorkingEnvironment } from './git.js';
2
+ import { collectCodingWorkspaceTree } from './workspace-tree.js';
3
+ export async function collectCodingWorkingEnvironment(input) {
4
+ const sources = [{
5
+ kind: 'filesystem',
6
+ path: input.workspaceRoot,
7
+ note: 'workspace root',
8
+ }];
9
+ const limits = [];
10
+ const gitResult = await collectGitWorkingEnvironment(input.workspaceRoot);
11
+ sources.push(...gitResult.sources);
12
+ limits.push(...gitResult.limits);
13
+ return {
14
+ environment: {
15
+ workspaceRoot: input.workspaceRoot,
16
+ gitRepositoryRoot: gitResult.environment.gitRepositoryRoot,
17
+ gitBranch: gitResult.environment.gitBranch,
18
+ gitShortCommit: gitResult.environment.gitShortCommit,
19
+ isGitRepository: gitResult.environment.isGitRepository,
20
+ isDirty: gitResult.environment.isDirty,
21
+ paths: gitResult.environment.paths,
22
+ },
23
+ sources,
24
+ limits,
25
+ };
26
+ }
27
+ export async function collectCodingProjectDashboard(input) {
28
+ const [environmentResult, treeResult] = await Promise.all([
29
+ collectCodingWorkingEnvironment(input),
30
+ collectCodingWorkspaceTree({
31
+ workspaceRoot: input.workspaceRoot,
32
+ maxDepth: input.maxDepth,
33
+ maxEntries: input.maxEntries,
34
+ }),
35
+ ]);
36
+ return {
37
+ environment: environmentResult.environment,
38
+ workspaceTree: treeResult.tree,
39
+ sources: mergeSources(environmentResult.sources, treeResult.sources),
40
+ limits: [...environmentResult.limits, ...treeResult.limits],
41
+ };
42
+ }
43
+ function mergeSources(left, right) {
44
+ const seen = new Set();
45
+ const merged = [];
46
+ for (const source of [...left, ...right]) {
47
+ const key = `${source.kind}|${source.command ?? ''}|${source.path ?? ''}|${source.note ?? ''}`;
48
+ if (seen.has(key)) {
49
+ continue;
50
+ }
51
+ seen.add(key);
52
+ merged.push(source);
53
+ }
54
+ return merged;
55
+ }
56
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../../../../../src/core/awareness/domains/coding/collectors/workspace.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAEjE,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAC,KAA4B;IAKhF,MAAM,OAAO,GAAsB,CAAC;YAClC,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,KAAK,CAAC,aAAa;YACzB,IAAI,EAAE,gBAAgB;SACvB,CAAC,CAAC;IACH,MAAM,MAAM,GAAqB,EAAE,CAAC;IAEpC,MAAM,SAAS,GAAG,MAAM,4BAA4B,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC1E,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAEjC,OAAO;QACL,WAAW,EAAE;YACX,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,iBAAiB,EAAE,SAAS,CAAC,WAAW,CAAC,iBAAiB;YAC1D,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,SAAS;YAC1C,cAAc,EAAE,SAAS,CAAC,WAAW,CAAC,cAAc;YACpD,eAAe,EAAE,SAAS,CAAC,WAAW,CAAC,eAAe;YACtD,OAAO,EAAE,SAAS,CAAC,WAAW,CAAC,OAAO;YACtC,KAAK,EAAE,SAAS,CAAC,WAAW,CAAC,KAAK;SACnC;QACD,OAAO;QACP,MAAM;KACP,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,KAA4B;IAM9E,MAAM,CAAC,iBAAiB,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACxD,+BAA+B,CAAC,KAAK,CAAC;QACtC,0BAA0B,CAAC;YACzB,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC;KACH,CAAC,CAAC;IAEH,OAAO;QACL,WAAW,EAAE,iBAAiB,CAAC,WAAW;QAC1C,aAAa,EAAE,UAAU,CAAC,IAAI;QAC9B,OAAO,EAAE,YAAY,CAAC,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC;QACpE,MAAM,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,IAAuB,EACvB,KAAwB;IAExB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QAC/F,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CodingAwarenessSnapshot, CodingProjectDashboardOutput } from './types.js';
2
+ export declare function formatCodingProjectDashboardSnapshot(snapshot: CodingAwarenessSnapshot): CodingProjectDashboardOutput;
3
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../../../../src/core/awareness/domains/coding/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAExF,wBAAgB,oCAAoC,CAAC,QAAQ,EAAE,uBAAuB,GAAG,4BAA4B,CAsBpH"}
@@ -0,0 +1,22 @@
1
+ export function formatCodingProjectDashboardSnapshot(snapshot) {
2
+ const sections = {};
3
+ for (const section of snapshot.sections) {
4
+ if (section.type === 'working_environment') {
5
+ sections.working_environment = section.data;
6
+ }
7
+ if (section.type === 'workspace_tree') {
8
+ sections.workspace_tree = section.data;
9
+ }
10
+ }
11
+ return {
12
+ schemaVersion: 1,
13
+ domain: 'coding',
14
+ profile: 'project_dashboard',
15
+ collectedAt: snapshot.collectedAt,
16
+ workspaceRoot: snapshot.workspaceRoot,
17
+ sections,
18
+ sources: snapshot.sources,
19
+ limits: snapshot.limits,
20
+ };
21
+ }
22
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../../../../src/core/awareness/domains/coding/format.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oCAAoC,CAAC,QAAiC;IACpF,MAAM,QAAQ,GAA6C,EAAE,CAAC;IAE9D,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACxC,IAAI,OAAO,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YAC3C,QAAQ,CAAC,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;QAC9C,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACtC,QAAQ,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;QACzC,CAAC;IACH,CAAC;IAED,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,mBAAmB;QAC5B,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,QAAQ;QACR,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;KACxB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { AwarenessProvider } from '../../types.js';
2
+ import type { CodingAwarenessSnapshot } from './types.js';
3
+ export type CodingAwarenessProviderOptions = {
4
+ now?: () => Date;
5
+ nextId?: () => string;
6
+ };
7
+ export declare function createCodingAwarenessProvider(options?: CodingAwarenessProviderOptions): AwarenessProvider<CodingAwarenessSnapshot['sections'][number]>;
8
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../../../src/core/awareness/domains/coding/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAG1D,MAAM,MAAM,8BAA8B,GAAG;IAC3C,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,8BAAmC,GAC3C,iBAAiB,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAuChE"}
@@ -0,0 +1,42 @@
1
+ import { collectCodingProjectDashboard } from './collectors/workspace.js';
2
+ export function createCodingAwarenessProvider(options = {}) {
3
+ return {
4
+ domain: 'coding',
5
+ async collect(input) {
6
+ if (input.profile !== 'project_dashboard') {
7
+ throw new Error(`Unsupported coding awareness profile: ${input.profile}`);
8
+ }
9
+ const collectedAt = (options.now ?? (() => new Date()))().toISOString();
10
+ const id = (options.nextId ?? defaultNextId)();
11
+ const collected = await collectCodingProjectDashboard(input);
12
+ const requestedSections = new Set(input.requestedSections ?? ['working_environment', 'workspace_tree']);
13
+ const sections = [];
14
+ if (requestedSections.has('working_environment')) {
15
+ sections.push({
16
+ type: 'working_environment',
17
+ data: collected.environment,
18
+ });
19
+ }
20
+ if (requestedSections.has('workspace_tree')) {
21
+ sections.push({
22
+ type: 'workspace_tree',
23
+ data: collected.workspaceTree,
24
+ });
25
+ }
26
+ return {
27
+ id,
28
+ domain: 'coding',
29
+ profile: 'project_dashboard',
30
+ collectedAt,
31
+ workspaceRoot: input.workspaceRoot,
32
+ sections,
33
+ sources: collected.sources,
34
+ limits: collected.limits,
35
+ };
36
+ },
37
+ };
38
+ }
39
+ function defaultNextId() {
40
+ return `awareness-${Math.random().toString(36).slice(2, 10)}`;
41
+ }
42
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../../../../src/core/awareness/domains/coding/provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAO1E,MAAM,UAAU,6BAA6B,CAC3C,UAA0C,EAAE;IAE5C,OAAO;QACL,MAAM,EAAE,QAAQ;QAChB,KAAK,CAAC,OAAO,CAAC,KAA4B;YACxC,IAAI,KAAK,CAAC,OAAO,KAAK,mBAAmB,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,yCAAyC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5E,CAAC;YAED,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;YACxE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,EAAE,CAAC;YAC/C,MAAM,SAAS,GAAG,MAAM,6BAA6B,CAAC,KAAK,CAAC,CAAC;YAC7D,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,CAAC,CAAC;YACxG,MAAM,QAAQ,GAAwC,EAAE,CAAC;YAEzD,IAAI,iBAAiB,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC;gBACjD,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,qBAAqB;oBAC3B,IAAI,EAAE,SAAS,CAAC,WAAW;iBAC5B,CAAC,CAAC;YACL,CAAC;YACD,IAAI,iBAAiB,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC5C,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,gBAAgB;oBACtB,IAAI,EAAE,SAAS,CAAC,aAAa;iBAC9B,CAAC,CAAC;YACL,CAAC;YAED,OAAO;gBACL,EAAE;gBACF,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,mBAAmB;gBAC5B,WAAW;gBACX,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,QAAQ;gBACR,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,MAAM,EAAE,SAAS,CAAC,MAAM;aACzB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,aAAa,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AAChE,CAAC"}