@engineeros/connector 0.2.0 → 0.2.1

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/README.md CHANGED
@@ -10,7 +10,7 @@ Create a connection command from **Project steering -> Connect workspace**, then
10
10
  npx --yes @engineeros/connector@latest pair PAIRING-CODE --url https://your-engineeros.example --workspace . --onboard
11
11
  ```
12
12
 
13
- The connector uploads a bounded ZIP snapshot for assessment, then stays online for rescans and Goal Runs. Onboarding never executes repository code. It excludes known secrets, dependency directories, build output, caches, Git metadata, and connector state before upload.
13
+ The connector uploads a bounded ZIP snapshot for assessment, then stays online for rescans and Goal Runs. Onboarding never executes repository code. It excludes known secrets, dependency directories, build output, compiled binaries, files larger than 5 MB, agent-tool caches, Git metadata, and connector state before upload.
14
14
 
15
15
  An empty or document-only folder establishes a greenfield baseline. A code-bearing folder is assessed as brownfield. Use **Rescan** in Steering after the local workspace changes.
16
16
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@engineeros/connector",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Connect a local Codex CLI workspace to EngineerOS over an outbound WebSocket.",
5
5
  "private": false,
6
6
  "type": "module",
package/src/runner.mjs CHANGED
@@ -8,9 +8,15 @@ import { deflateRaw } from "node:zlib";
8
8
 
9
9
  const deflate = promisify(deflateRaw);
10
10
  const MAX_ARCHIVE_BYTES = 25 * 1024 * 1024;
11
+ const MAX_SHAREABLE_FILE_BYTES = 5 * 1024 * 1024;
11
12
  const MAX_WORKSPACE_FILES = 5_000;
12
13
  const EXCLUDED_DIRECTORIES = new Set([
14
+ ".agents",
15
+ ".claude",
16
+ ".codex",
13
17
  ".engineeros",
18
+ ".forge",
19
+ ".gemini",
14
20
  ".git",
15
21
  ".next",
16
22
  ".pytest_cache",
@@ -24,6 +30,29 @@ const EXCLUDED_DIRECTORIES = new Set([
24
30
  "target",
25
31
  "vendor",
26
32
  ]);
33
+ const EXCLUDED_PATH_PREFIXES = [".github/skills/"];
34
+ const EXCLUDED_FILE_EXTENSIONS = new Set([
35
+ ".7z",
36
+ ".a",
37
+ ".bin",
38
+ ".class",
39
+ ".dll",
40
+ ".dylib",
41
+ ".exe",
42
+ ".gz",
43
+ ".jar",
44
+ ".lib",
45
+ ".o",
46
+ ".obj",
47
+ ".pyc",
48
+ ".pyo",
49
+ ".rar",
50
+ ".so",
51
+ ".tar",
52
+ ".tgz",
53
+ ".war",
54
+ ".zip",
55
+ ]);
27
56
  const CODE_EXTENSIONS = new Set([
28
57
  ".c",
29
58
  ".cpp",
@@ -123,6 +152,10 @@ export async function workspaceSnapshot(workspace) {
123
152
  excludedFileCount += 1;
124
153
  continue;
125
154
  }
155
+ if (details.size > MAX_SHAREABLE_FILE_BYTES) {
156
+ excludedFileCount += 1;
157
+ continue;
158
+ }
126
159
  totalBytes += details.size;
127
160
  if (totalBytes > MAX_ARCHIVE_BYTES) {
128
161
  throw new Error(
@@ -363,7 +396,15 @@ function isShareablePath(relative) {
363
396
  if (parts.some((part) => EXCLUDED_DIRECTORIES.has(part.toLowerCase()))) {
364
397
  return false;
365
398
  }
399
+ if (
400
+ EXCLUDED_PATH_PREFIXES.some((prefix) =>
401
+ normalized.toLowerCase().startsWith(prefix),
402
+ )
403
+ ) {
404
+ return false;
405
+ }
366
406
  const name = parts.at(-1)?.toLowerCase() ?? "";
407
+ if (EXCLUDED_FILE_EXTENSIONS.has(path.posix.extname(name))) return false;
367
408
  if (name === ".env.example" || name === ".env.sample") return true;
368
409
  if (
369
410
  name === ".env" ||