claude-comms 1.0.33 → 1.0.35
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.
- package/.agents/repo.md +5 -27
- package/package.json +1 -1
- package/src/fetcher/github.js +45 -9
package/.agents/repo.md
CHANGED
|
@@ -1,29 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
# Repository Guidelines
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
- `
|
|
6
|
-
- `
|
|
7
|
-
- `
|
|
8
|
-
- `.claude/hooks/*` stores Python-powered agents, while `scripts/` provides operational helpers such as `start-system.sh`, `reset-system.sh`, and telemetry generators.
|
|
9
|
-
|
|
10
|
-
## Build, Test, and Development Commands
|
|
11
|
-
- `./scripts/start-system.sh` boots the Bun API, Vue dashboard, and SQLite broker for an end-to-end stack from the repo root.
|
|
12
|
-
- `cd apps/server && bun install && bun run dev` starts the API with hot reload; use `bun run start` for production parity and `bun run typecheck` before merging.
|
|
13
|
-
- `cd apps/client && bun install && bun run dev` launches the dashboard; `bun run build` compiles the Vite bundle and `bun run preview` smoke-tests it.
|
|
14
|
-
- `cd packages/setup-installer && npm install && npm test` validates the installer; run `npm run lint` or `npm run test:coverage` when altering CLI behavior or templates.
|
|
15
|
-
|
|
16
|
-
## Coding Style & Naming Conventions
|
|
17
|
-
- Use 2-space indentation, `camelCase` utilities, `PascalCase` components and types, and co-locate shared shapes in `apps/*/src/types.ts`.
|
|
18
|
-
- Keep persistence isolated to `apps/server/src/db.ts`; expose new queries through typed helpers rather than inline SQL inside request handlers.
|
|
19
|
-
- In the dashboard prefer composables in `src/composables`, Tailwind utility classes, and structured logging or toast utilities instead of raw `console.log` calls.
|
|
20
|
-
|
|
21
|
-
## Testing Guidelines
|
|
22
|
-
- Backend suites live in `apps/server/src/__tests__` with `.test.ts` suffixes; run `bun run test` or `bun run test:coverage` whenever mutating server logic.
|
|
23
|
-
- Dashboard coverage pairs Vitest (`bun run test`) with Playwright smoke tests in `apps/client/tests/playwright`; refresh artifacts in `tests/visual` when UI states change.
|
|
24
|
-
- Installer validation relies on Jest; execute `npm run test:integration` after template edits and `npm run test:e2e` before publishing new packages.
|
|
25
|
-
|
|
26
|
-
## Commit & Pull Request Guidelines
|
|
27
|
-
- History favors short, imperative subjects (`remove matrix mode`) with selective conventional prefixes (`chore(release): 1.0.23`); follow that tone and omit trailing periods.
|
|
28
|
-
- Reference issues and describe agent-facing impact in PR descriptions; attach dashboard screenshots or installer logs whenever UX or setup flows shift.
|
|
29
|
-
- Before requesting review, ensure `./scripts/test-system.sh` plus relevant package checks pass and call out skipped suites or follow-up tasks in the PR notes.
|
|
3
|
+
Run required commands — all must pass without warnings or errors:
|
|
4
|
+
- `pnpm lint`
|
|
5
|
+
- `pnpm ts:check`
|
|
6
|
+
- `pnpm test:all`
|
|
7
|
+
- `pnpm build`
|
package/package.json
CHANGED
package/src/fetcher/github.js
CHANGED
|
@@ -332,6 +332,10 @@ class GitHubFetcher extends EventEmitter {
|
|
|
332
332
|
// Observability hooks
|
|
333
333
|
'.claude/hooks/observability/send_event.py',
|
|
334
334
|
|
|
335
|
+
// Agents directory
|
|
336
|
+
'.agents/AGENTS.md',
|
|
337
|
+
'.agents/repo.md',
|
|
338
|
+
|
|
335
339
|
// Root CLAUDE.md
|
|
336
340
|
'CLAUDE.md'
|
|
337
341
|
];
|
|
@@ -339,7 +343,10 @@ class GitHubFetcher extends EventEmitter {
|
|
|
339
343
|
const files = [];
|
|
340
344
|
|
|
341
345
|
for (const filePath of knownFiles) {
|
|
342
|
-
if (filePath.startsWith(path) ||
|
|
346
|
+
if (filePath.startsWith(path) ||
|
|
347
|
+
(path === '.claude' && filePath.startsWith('.claude')) ||
|
|
348
|
+
(path === '.agents' && filePath.startsWith('.agents')) ||
|
|
349
|
+
(path === 'CLAUDE.md' && filePath === 'CLAUDE.md')) {
|
|
343
350
|
try {
|
|
344
351
|
const content = await this._fetchSingleFileRaw(filePath, options);
|
|
345
352
|
files.push(content);
|
|
@@ -867,6 +874,12 @@ class GitHubFetcher extends EventEmitter {
|
|
|
867
874
|
type: 'dir',
|
|
868
875
|
children: [],
|
|
869
876
|
files: []
|
|
877
|
+
},
|
|
878
|
+
'.agents': {
|
|
879
|
+
path: '.agents',
|
|
880
|
+
type: 'dir',
|
|
881
|
+
children: [],
|
|
882
|
+
files: []
|
|
870
883
|
}
|
|
871
884
|
};
|
|
872
885
|
|
|
@@ -899,18 +912,19 @@ class GitHubFetcher extends EventEmitter {
|
|
|
899
912
|
|
|
900
913
|
// Only extract files we care about
|
|
901
914
|
const isClaudeFile = actualPath.startsWith('.claude/') || actualPath === '.claude';
|
|
915
|
+
const isAgentsFile = actualPath.startsWith('.agents/') || actualPath === '.agents';
|
|
902
916
|
const isClaudeMd = actualPath === 'CLAUDE.md';
|
|
903
917
|
|
|
904
|
-
console.log(`DEBUG: ${actualPath} -> claude: ${isClaudeFile}, md: ${isClaudeMd}, type: ${entry.type}`);
|
|
918
|
+
console.log(`DEBUG: ${actualPath} -> claude: ${isClaudeFile}, agents: ${isAgentsFile}, md: ${isClaudeMd}, type: ${entry.type}`);
|
|
905
919
|
|
|
906
|
-
if ((isClaudeFile || isClaudeMd) && entry.type === 'File') {
|
|
920
|
+
if ((isClaudeFile || isAgentsFile || isClaudeMd) && entry.type === 'File') {
|
|
907
921
|
wantedFiles.set(filePath, actualPath);
|
|
908
922
|
console.log(`DEBUG: Will extract: ${filePath} -> ${actualPath}`);
|
|
909
923
|
return true;
|
|
910
924
|
}
|
|
911
925
|
|
|
912
|
-
// Also allow .claude directories to be processed for their children
|
|
913
|
-
if (isClaudeFile && entry.type === 'Directory') {
|
|
926
|
+
// Also allow .claude and .agents directories to be processed for their children
|
|
927
|
+
if ((isClaudeFile || isAgentsFile) && entry.type === 'Directory') {
|
|
914
928
|
return true;
|
|
915
929
|
}
|
|
916
930
|
|
|
@@ -964,6 +978,21 @@ class GitHubFetcher extends EventEmitter {
|
|
|
964
978
|
// Build directory structure for compatibility
|
|
965
979
|
const relativePath = actualPath.slice('.claude/'.length);
|
|
966
980
|
this._addToDirectoryStructure(extractedFiles['.claude'], relativePath, fileObj);
|
|
981
|
+
} else if (actualPath.startsWith('.agents/')) {
|
|
982
|
+
// Add to .agents files
|
|
983
|
+
const fileObj = {
|
|
984
|
+
path: actualPath,
|
|
985
|
+
content: content,
|
|
986
|
+
encoding: 'utf-8',
|
|
987
|
+
type: 'file'
|
|
988
|
+
};
|
|
989
|
+
|
|
990
|
+
extractedFiles['.agents'].files.push(fileObj);
|
|
991
|
+
console.log(`DEBUG: Added ${actualPath} to .agents files (${extractedFiles['.agents'].files.length} total)`);
|
|
992
|
+
|
|
993
|
+
// Build directory structure for compatibility
|
|
994
|
+
const relativePath = actualPath.slice('.agents/'.length);
|
|
995
|
+
this._addToDirectoryStructure(extractedFiles['.agents'], relativePath, fileObj);
|
|
967
996
|
}
|
|
968
997
|
}
|
|
969
998
|
} catch (fileError) {
|
|
@@ -972,7 +1001,7 @@ class GitHubFetcher extends EventEmitter {
|
|
|
972
1001
|
}
|
|
973
1002
|
}
|
|
974
1003
|
|
|
975
|
-
console.log(`DEBUG: Final result - .claude has ${extractedFiles['.claude'].files.length} files, CLAUDE.md: ${extractedFiles['CLAUDE.md'] ? 'present' : 'missing'}`);
|
|
1004
|
+
console.log(`DEBUG: Final result - .claude has ${extractedFiles['.claude'].files.length} files, .agents has ${extractedFiles['.agents'].files.length} files, CLAUDE.md: ${extractedFiles['CLAUDE.md'] ? 'present' : 'missing'}`);
|
|
976
1005
|
|
|
977
1006
|
// Clean up temp directory
|
|
978
1007
|
try {
|
|
@@ -1059,8 +1088,13 @@ async function fetchRepository(gitRef = 'main', options = {}) {
|
|
|
1059
1088
|
|
|
1060
1089
|
return {
|
|
1061
1090
|
claudeDirectory: tarballFiles['.claude'],
|
|
1091
|
+
agentsDirectory: tarballFiles['.agents'],
|
|
1062
1092
|
claudeFile: tarballFiles['CLAUDE.md'],
|
|
1063
|
-
files: [
|
|
1093
|
+
files: [
|
|
1094
|
+
...(tarballFiles['.claude'].files || []),
|
|
1095
|
+
...(tarballFiles['.agents'].files || []),
|
|
1096
|
+
tarballFiles['CLAUDE.md']
|
|
1097
|
+
]
|
|
1064
1098
|
};
|
|
1065
1099
|
|
|
1066
1100
|
} catch (tarballError) {
|
|
@@ -1069,15 +1103,17 @@ async function fetchRepository(gitRef = 'main', options = {}) {
|
|
|
1069
1103
|
|
|
1070
1104
|
try {
|
|
1071
1105
|
// Strategy 2: Individual file fetch (fallback)
|
|
1072
|
-
const [claudeDir, claudeMd] = await Promise.all([
|
|
1106
|
+
const [claudeDir, agentsDir, claudeMd] = await Promise.all([
|
|
1073
1107
|
fetcher.fetchDirectory('.claude', { version: gitRef }),
|
|
1108
|
+
fetcher.fetchDirectory('.agents', { version: gitRef }),
|
|
1074
1109
|
fetcher.fetchFile('CLAUDE.md', { version: gitRef })
|
|
1075
1110
|
]);
|
|
1076
1111
|
|
|
1077
1112
|
return {
|
|
1078
1113
|
claudeDirectory: claudeDir,
|
|
1114
|
+
agentsDirectory: agentsDir,
|
|
1079
1115
|
claudeFile: claudeMd,
|
|
1080
|
-
files: [...(claudeDir.files || []), claudeMd]
|
|
1116
|
+
files: [...(claudeDir.files || []), ...(agentsDir.files || []), claudeMd]
|
|
1081
1117
|
};
|
|
1082
1118
|
|
|
1083
1119
|
} catch (fallbackError) {
|