sinapse-ai 1.4.1 → 1.4.2

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.
@@ -36,38 +36,61 @@ function readManifestVersion(manifestPath) {
36
36
  }
37
37
 
38
38
  async function run(context) {
39
+ // v1.4.2 fix: this check was designed for the FRAMEWORK REPO itself — it
40
+ // detects drift between `package.json` and the auto-generated install-manifest
41
+ // during pre-publish. When run in a USER project, the cwd `package.json` is
42
+ // the user's own (e.g. `version: "1.0.0"`), and `install-manifest.yaml` ships
43
+ // with the framework version. Comparing them is meaningless and the FAIL
44
+ // message + fix command (`npm run generate:manifest`) are confusing — that
45
+ // script only exists in the framework repo.
46
+ //
47
+ // Detect framework-repo context by reading `name` from package.json. Only
48
+ // perform parity check when name === "sinapse-ai". Otherwise INFO.
49
+
39
50
  const pkgPath = path.join(context.projectRoot, 'package.json');
40
51
  const manifestPath = path.join(context.projectRoot, '.sinapse-ai', 'install-manifest.yaml');
41
52
 
42
53
  if (!fs.existsSync(pkgPath)) {
43
54
  return {
44
55
  check: name,
45
- status: 'WARN',
46
- message: 'package.json not found in project root',
56
+ status: 'INFO',
57
+ message: 'No package.json parity check not applicable',
47
58
  fixCommand: null,
48
59
  };
49
60
  }
50
- if (!fs.existsSync(manifestPath)) {
61
+
62
+ let pkgJson;
63
+ try {
64
+ pkgJson = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
65
+ } catch {
51
66
  return {
52
67
  check: name,
53
68
  status: 'WARN',
54
- message: 'install-manifest.yaml not found',
55
- fixCommand: 'npm run generate:manifest',
69
+ message: 'package.json could not be parsed',
70
+ fixCommand: null,
56
71
  };
57
72
  }
58
73
 
59
- let pkgVersion;
60
- try {
61
- pkgVersion = JSON.parse(fs.readFileSync(pkgPath, 'utf8')).version;
62
- } catch {
74
+ // Only audit parity inside the framework repo itself.
75
+ if (pkgJson.name !== 'sinapse-ai') {
63
76
  return {
64
77
  check: name,
65
- status: 'WARN',
66
- message: 'package.json could not be parsed',
78
+ status: 'INFO',
79
+ message: 'Parity check skipped (not the sinapse-ai repo)',
67
80
  fixCommand: null,
68
81
  };
69
82
  }
70
83
 
84
+ if (!fs.existsSync(manifestPath)) {
85
+ return {
86
+ check: name,
87
+ status: 'WARN',
88
+ message: 'install-manifest.yaml not found',
89
+ fixCommand: 'npm run generate:manifest',
90
+ };
91
+ }
92
+
93
+ const pkgVersion = pkgJson.version;
71
94
  const manifestVersion = readManifestVersion(manifestPath);
72
95
 
73
96
  if (!pkgVersion || !manifestVersion) {
@@ -31,18 +31,15 @@ function canResolveDep(dep, fromDir) {
31
31
  }
32
32
 
33
33
  async function run(context) {
34
- const nodeModulesPath = path.join(context.projectRoot, 'node_modules');
35
- // Check 1: Project node_modules
36
- if (!fs.existsSync(nodeModulesPath)) {
37
- return {
38
- check: name,
39
- status: 'FAIL',
40
- message: 'node_modules not found',
41
- fixCommand: 'npm install',
42
- };
43
- }
34
+ // v1.4.2 fix: drop the "node_modules not found" hard FAIL.
35
+ // Many user projects don't have a project-level package.json or node_modules
36
+ // (e.g. someone using SINAPSE in a writing project, design repo, infra-only
37
+ // repo). The presence of project node_modules is NOT a requirement for the
38
+ // framework to work — Story 10.48 already established that .sinapse-ai deps
39
+ // can resolve via parent/global node_modules. Only flag what truly blocks
40
+ // the framework: unresolvable .sinapse-ai deps.
44
41
 
45
- // Check 2 (Story 10.48): resolve declared deps via Node's resolver.
42
+ // Story 10.48: resolve declared deps via Node's resolver.
46
43
  // Walks parent + global directories — does NOT require a sibling
47
44
  // node_modules/ inside .sinapse-ai/ when the dep is reachable elsewhere.
48
45
  const sinapseCoreDir = path.join(context.projectRoot, '.sinapse-ai');
@@ -82,19 +79,25 @@ async function run(context) {
82
79
  };
83
80
  }
84
81
 
85
- let detail = '';
82
+ // v1.4.2: report status based on what's actually relevant — sinapse-ai
83
+ // deps resolvability, not the presence of an arbitrary node_modules dir.
84
+ let message;
86
85
  if (hasSinapseCorePkg) {
87
86
  if (fs.existsSync(sinapseCoreNodeModules)) {
88
- detail = ', .sinapse-ai deps complete';
87
+ message = `.sinapse-ai deps complete (${totalDeps} declared)`;
89
88
  } else if (totalDeps > 0) {
90
- detail = `, .sinapse-ai deps (${totalDeps}) resolved via parent node_modules`;
89
+ message = `.sinapse-ai deps (${totalDeps}) resolved via parent/global node_modules`;
90
+ } else {
91
+ message = '.sinapse-ai package has no deps declared';
91
92
  }
93
+ } else {
94
+ message = 'no .sinapse-ai/package.json — framework runs from npm install';
92
95
  }
93
96
 
94
97
  return {
95
98
  check: name,
96
99
  status: 'PASS',
97
- message: 'node_modules present' + detail,
100
+ message,
98
101
  fixCommand: null,
99
102
  };
100
103
  }
@@ -14,14 +14,20 @@ const fs = require('fs');
14
14
  const name = 'skills-count';
15
15
 
16
16
  async function run(context) {
17
+ // v1.4.2 fix: skills are OPTIONAL user-installed artifacts under .claude/skills/,
18
+ // not shipped by `npx sinapse-ai install` (verified against install-manifest).
19
+ // Previous behavior FAILed with "Run `npx sinapse-ai install --force`" — but
20
+ // force-reinstall doesn't create skills either. Now reports as INFO when
21
+ // absent and as PASS/WARN proportional to how many were installed by the user.
22
+
17
23
  const skillsDir = path.join(context.projectRoot, '.claude', 'skills');
18
24
 
19
25
  if (!fs.existsSync(skillsDir)) {
20
26
  return {
21
27
  check: name,
22
- status: 'FAIL',
23
- message: 'Skills directory not found (.claude/skills/)',
24
- fixCommand: 'npx sinapse-ai install --force',
28
+ status: 'INFO',
29
+ message: 'No .claude/skills/ directory skills are optional (install via `npx claude-skills add <name>`)',
30
+ fixCommand: null,
25
31
  };
26
32
  }
27
33
 
@@ -31,9 +37,9 @@ async function run(context) {
31
37
  } catch {
32
38
  return {
33
39
  check: name,
34
- status: 'FAIL',
35
- message: 'Cannot read skills directory',
36
- fixCommand: 'npx sinapse-ai install --force',
40
+ status: 'WARN',
41
+ message: 'Cannot read .claude/skills/ directory',
42
+ fixCommand: null,
37
43
  };
38
44
  }
39
45
 
@@ -46,31 +52,22 @@ async function run(context) {
46
52
  if (count === 0) {
47
53
  return {
48
54
  check: name,
49
- status: 'FAIL',
50
- message: 'No skills found (expected >=7)',
51
- fixCommand: 'npx sinapse-ai install --force',
52
- };
53
- }
54
-
55
- if (count >= 7) {
56
- return {
57
- check: name,
58
- status: 'PASS',
59
- message: `${count} skills found`,
55
+ status: 'INFO',
56
+ message: 'Skills directory exists but empty — skills are optional',
60
57
  fixCommand: null,
61
58
  };
62
59
  }
63
60
 
64
61
  return {
65
62
  check: name,
66
- status: 'WARN',
67
- message: `Only ${count}/7 skills found`,
68
- fixCommand: 'npx sinapse-ai install --force',
63
+ status: 'PASS',
64
+ message: `${count} skill${count === 1 ? '' : 's'} installed`,
65
+ fixCommand: null,
69
66
  };
70
67
  }
71
68
 
72
- // Story A.3: skills dir ships with the framework.
73
- const onError = 'fail';
69
+ // v1.4.2: skills are optional never FAIL on this check.
70
+ const onError = 'warn';
74
71
 
75
72
  module.exports = { name, run, onError };
76
73
 
@@ -49,24 +49,23 @@ const DOCTOR_VERSION = '2.1.0';
49
49
  * @returns {{ installed: boolean, marker?: string }}
50
50
  */
51
51
  function detectInstallState(context) {
52
- // Allow the caller (tests, CI harnesses) to override the home directory
53
- // without mutating process env. Falls back to os.homedir() for real runs.
54
- const home = (context && context.options && context.options.homeDir)
55
- || process.env.SINAPSE_DOCTOR_HOME
56
- || os.homedir();
57
- const markers = [
58
- { label: 'project', path: path.join(context.projectRoot, '.sinapse-ai') },
59
- { label: 'global-sinapse', path: path.join(home, '.sinapse') },
60
- { label: 'claude-commands', path: path.join(home, '.claude', 'commands', 'SINAPSE') },
61
- ];
62
- for (const m of markers) {
63
- try {
64
- if (fs.existsSync(m.path)) {
65
- return { installed: true, marker: m.label };
66
- }
67
- } catch {
68
- // permission error on one marker — keep checking others
52
+ // Story 10.42 (v1.4.2 fix): doctor is PROJECT-centric.
53
+ // Previous version qualified `~/.sinapse/` and `~/.claude/commands/SINAPSE/`
54
+ // as "installed" markers, but those are GLOBAL artifacts left by any past
55
+ // install on the machine. They were always TRUE for any user who had ever
56
+ // run `npx sinapse-ai install` in any other project, defeating the entire
57
+ // purpose of fresh-project detection.
58
+ //
59
+ // The only marker that means "SINAPSE is installed IN THIS PROJECT" is
60
+ // `<projectRoot>/.sinapse-ai/`. Without it, the user is in a fresh dir
61
+ // and should see the NOT_INSTALLED friendly message.
62
+ const projectMarker = path.join(context.projectRoot, '.sinapse-ai');
63
+ try {
64
+ if (fs.existsSync(projectMarker)) {
65
+ return { installed: true, marker: 'project' };
69
66
  }
67
+ } catch {
68
+ // permission error — treat as not installed and let user retry
70
69
  }
71
70
  return { installed: false };
72
71
  }
@@ -3697,7 +3697,6 @@ entities:
3697
3697
  purpose: '''Let\''s start with the fundamental details about your agent'','
3698
3698
  type: module
3699
3699
  usedBy:
3700
- - index
3701
3700
  - index.esm
3702
3701
  agent-invoker:
3703
3702
  adaptability:
@@ -4473,7 +4472,6 @@ entities:
4473
4472
  type: module
4474
4473
  usedBy:
4475
4474
  - config-resolver
4476
- - index
4477
4475
  - index.esm
4478
4476
  - agent-config-loader
4479
4477
  config-loader:
@@ -4497,7 +4495,6 @@ entities:
4497
4495
  purpose: Entity at .sinapse-ai\core\config\config-loader.js
4498
4496
  type: module
4499
4497
  usedBy:
4500
- - index
4501
4498
  - index.esm
4502
4499
  config-migrator:
4503
4500
  adaptability:
@@ -4664,7 +4661,6 @@ entities:
4664
4661
  type: module
4665
4662
  usedBy:
4666
4663
  - context-loader
4667
- - index
4668
4664
  - index.esm
4669
4665
  - agent-exit-hooks
4670
4666
  - greeting-builder
@@ -4711,7 +4707,6 @@ entities:
4711
4707
  purpose: Entity at .sinapse-ai\core\session\context-loader.js
4712
4708
  type: module
4713
4709
  usedBy:
4714
- - index
4715
4710
  - index.esm
4716
4711
  - unified-activation-pipeline
4717
4712
  - context-loading
@@ -5343,7 +5338,8 @@ entities:
5343
5338
  plannedDeps: []
5344
5339
  purpose: Entity at .sinapse-ai\core\doctor\fix-handler.js
5345
5340
  type: module
5346
- usedBy: []
5341
+ usedBy:
5342
+ - index
5347
5343
  focus-area-recommender:
5348
5344
  adaptability:
5349
5345
  constraints: []
@@ -5943,30 +5939,22 @@ entities:
5943
5939
  constraints: []
5944
5940
  extensionPoints: []
5945
5941
  score: 0.4
5946
- checksum: sha256:1096fccecd12c7b7e6219951048c57bbf6a413e965bd80ae677ad1fc4d5ff604
5942
+ checksum: sha256:4a1e6dacba9c1fe7866b2b8a0041837a63acbe5c072185e9f73f809b94de22a6
5947
5943
  dependencies:
5948
- - config-cache
5949
- - config-loader
5950
- - context-detector
5951
- - context-loader
5952
- - elicitation-engine
5953
- - session-manager
5954
- - agent-elicitation
5955
- - task-elicitation
5956
- - workflow-elicitation
5957
- - output-formatter
5958
- - yaml-validator
5959
- - registry-loader
5944
+ - checks
5945
+ - text
5946
+ - json
5947
+ - fix-handler
5960
5948
  externalDeps: []
5961
5949
  keywords:
5962
5950
  - index
5963
- lastVerified: '2026-05-07T21:34:53.711Z'
5951
+ lastVerified: '2026-05-15T01:57:39.086Z'
5964
5952
  layer: L1
5965
5953
  lifecycle: experimental
5966
5954
  path: .sinapse-ai/core/index.js
5967
5955
  plannedDeps:
5968
5956
  - health-check
5969
- purpose: Entity at .sinapse-ai\core\index.js
5957
+ purpose: Entity at .sinapse-ai\core\doctor\index.js
5970
5958
  type: module
5971
5959
  usedBy: []
5972
5960
  index.esm:
@@ -6016,7 +6004,8 @@ entities:
6016
6004
  plannedDeps: []
6017
6005
  purpose: Entity at .sinapse-ai\core\doctor\formatters\json.js
6018
6006
  type: module
6019
- usedBy: []
6007
+ usedBy:
6008
+ - index
6020
6009
  json-formatter:
6021
6010
  adaptability:
6022
6011
  constraints: []
@@ -6443,14 +6432,14 @@ entities:
6443
6432
  constraints: []
6444
6433
  extensionPoints: []
6445
6434
  score: 0.4
6446
- checksum: sha256:c54afe044aec071ed0939a8cc2b99e9584597d3156d96f20afe57d5b83a05ffa
6435
+ checksum: sha256:ffb698eed47364abccf28ce9d3a07529ac00096f6993a4d03359998b364e8329
6447
6436
  dependencies: []
6448
6437
  externalDeps: []
6449
6438
  keywords:
6450
6439
  - manifest
6451
6440
  - version
6452
6441
  - parity
6453
- lastVerified: '2026-05-07T21:34:53.750Z'
6442
+ lastVerified: '2026-05-15T01:57:39.083Z'
6454
6443
  layer: L1
6455
6444
  lifecycle: orphan
6456
6445
  path: .sinapse-ai/core/doctor/checks/manifest-version-parity.js
@@ -6749,13 +6738,13 @@ entities:
6749
6738
  constraints: []
6750
6739
  extensionPoints: []
6751
6740
  score: 0.4
6752
- checksum: sha256:558f8f4388085c5711853f2a6cc9f0e3fcf8c0558cc606ff1fe0ff746693e325
6741
+ checksum: sha256:b39b767646a65a387752071347fc4316cf5f63f3357915febf7079436e3e89af
6753
6742
  dependencies: []
6754
6743
  externalDeps: []
6755
6744
  keywords:
6756
6745
  - npm
6757
6746
  - packages
6758
- lastVerified: '2026-05-07T21:34:53.753Z'
6747
+ lastVerified: '2026-05-15T01:57:39.085Z'
6759
6748
  layer: L1
6760
6749
  lifecycle: orphan
6761
6750
  path: .sinapse-ai/core/doctor/checks/npm-packages.js
@@ -7242,7 +7231,6 @@ entities:
7242
7231
  usedBy:
7243
7232
  - code-intel-source
7244
7233
  - framework-governor
7245
- - index
7246
7234
  - registry-source
7247
7235
  - registry-syncer
7248
7236
  registry-provider:
@@ -7514,7 +7502,6 @@ entities:
7514
7502
  type: module
7515
7503
  usedBy:
7516
7504
  - elicitation-engine
7517
- - index
7518
7505
  - index.esm
7519
7506
  session-state:
7520
7507
  adaptability:
@@ -7625,13 +7612,13 @@ entities:
7625
7612
  constraints: []
7626
7613
  extensionPoints: []
7627
7614
  score: 0.4
7628
- checksum: sha256:4861a2330ce5f3c696d53fc768d1575e03c4efcd5a217185d392556d2b1576cc
7615
+ checksum: sha256:2ed67974d87e3b4e4efa84527061f824eb8c79dc3a5925adb149870c6c0faf3c
7629
7616
  dependencies: []
7630
7617
  externalDeps: []
7631
7618
  keywords:
7632
7619
  - skills
7633
7620
  - count
7634
- lastVerified: '2026-05-07T21:34:53.753Z'
7621
+ lastVerified: '2026-05-15T01:57:39.085Z'
7635
7622
  layer: L1
7636
7623
  lifecycle: orphan
7637
7624
  path: .sinapse-ai/core/doctor/checks/skills-count.js
@@ -7894,7 +7881,6 @@ entities:
7894
7881
  purpose: '''Define the fundamental details of your task'','
7895
7882
  type: module
7896
7883
  usedBy:
7897
- - index
7898
7884
  - index.esm
7899
7885
  tech-stack-detector:
7900
7886
  adaptability:
@@ -7975,7 +7961,8 @@ entities:
7975
7961
  plannedDeps: []
7976
7962
  purpose: ${pass} PASS | ${warn} WARN | ${fail} FAIL | ${info} INFO`);
7977
7963
  type: module
7978
- usedBy: []
7964
+ usedBy:
7965
+ - index
7979
7966
  timing-collector:
7980
7967
  adaptability:
7981
7968
  constraints: []
@@ -8175,7 +8162,6 @@ entities:
8175
8162
  purpose: '''Where should this workflow be created?'','
8176
8163
  type: module
8177
8164
  usedBy:
8178
- - index
8179
8165
  - index.esm
8180
8166
  - verify-workflow-gaps
8181
8167
  workflow-executor:
@@ -9422,7 +9408,6 @@ entities:
9422
9408
  usedBy:
9423
9409
  - batch-creator
9424
9410
  - component-generator
9425
- - index
9426
9411
  - index.esm
9427
9412
  elicitation-session-manager:
9428
9413
  adaptability:
@@ -17067,7 +17052,6 @@ entities:
17067
17052
  purpose: Entity at .sinapse-ai\core\utils\output-formatter.js
17068
17053
  type: util
17069
17054
  usedBy:
17070
- - index
17071
17055
  - index.esm
17072
17056
  - next
17073
17057
  security-utils:
@@ -17110,7 +17094,6 @@ entities:
17110
17094
  usedBy:
17111
17095
  - component-generator
17112
17096
  - modification-validator
17113
- - index
17114
17097
  - index.esm
17115
17098
  workflows:
17116
17099
  auto-worktree:
@@ -17489,6 +17472,6 @@ entities:
17489
17472
  metadata:
17490
17473
  checksumAlgorithm: sha256
17491
17474
  entityCount: 756
17492
- lastUpdated: '2026-05-08T18:38:36.605Z'
17475
+ lastUpdated: '2026-05-15T01:57:39.089Z'
17493
17476
  resolutionRate: 100
17494
17477
  version: 1.0.0
@@ -0,0 +1,4 @@
1
+ {"timestamp":"2026-05-15T01:57:39.084Z","action":"change","path":".sinapse-ai/core/doctor/checks/manifest-version-parity.js","trigger":"watcher"}
2
+ {"timestamp":"2026-05-15T01:57:39.085Z","action":"change","path":".sinapse-ai/core/doctor/checks/npm-packages.js","trigger":"watcher"}
3
+ {"timestamp":"2026-05-15T01:57:39.085Z","action":"change","path":".sinapse-ai/core/doctor/checks/skills-count.js","trigger":"watcher"}
4
+ {"timestamp":"2026-05-15T01:57:39.086Z","action":"change","path":".sinapse-ai/core/doctor/index.js","trigger":"watcher"}
@@ -7,7 +7,7 @@
7
7
  # - SHA256 hashes for change detection
8
8
  # - File types for categorization
9
9
  #
10
- version: 1.4.1
10
+ version: 1.4.2
11
11
  generator: scripts/generate-install-manifest.js
12
12
  file_count: 1164
13
13
  files:
@@ -348,17 +348,17 @@ files:
348
348
  type: core
349
349
  size: 1513
350
350
  - path: core/doctor/checks/manifest-version-parity.js
351
- hash: sha256:c54afe044aec071ed0939a8cc2b99e9584597d3156d96f20afe57d5b83a05ffa
351
+ hash: sha256:ffb698eed47364abccf28ce9d3a07529ac00096f6993a4d03359998b364e8329
352
352
  type: core
353
- size: 2946
353
+ size: 3907
354
354
  - path: core/doctor/checks/node-version.js
355
355
  hash: sha256:1128759128fd60822b6dc08527442bc88bc713266ef1561fcfcba5dd31992a84
356
356
  type: core
357
357
  size: 785
358
358
  - path: core/doctor/checks/npm-packages.js
359
- hash: sha256:558f8f4388085c5711853f2a6cc9f0e3fcf8c0558cc606ff1fe0ff746693e325
359
+ hash: sha256:b39b767646a65a387752071347fc4316cf5f63f3357915febf7079436e3e89af
360
360
  type: core
361
- size: 3296
361
+ size: 3814
362
362
  - path: core/doctor/checks/rules-files.js
363
363
  hash: sha256:16205df27fd9c8d73de42593429afbe6b2c4d70cca4bdde3a51b704f1d292e63
364
364
  type: core
@@ -368,9 +368,9 @@ files:
368
368
  type: core
369
369
  size: 3411
370
370
  - path: core/doctor/checks/skills-count.js
371
- hash: sha256:4861a2330ce5f3c696d53fc768d1575e03c4efcd5a217185d392556d2b1576cc
371
+ hash: sha256:2ed67974d87e3b4e4efa84527061f824eb8c79dc3a5925adb149870c6c0faf3c
372
372
  type: core
373
- size: 1675
373
+ size: 1941
374
374
  - path: core/doctor/fix-handler.js
375
375
  hash: sha256:1463b78a16235f184da1d5d39af089d56641aaab585c0c0ccb326b566f6297de
376
376
  type: core
@@ -384,9 +384,9 @@ files:
384
384
  type: core
385
385
  size: 1807
386
386
  - path: core/doctor/index.js
387
- hash: sha256:b8f7fea288882345109bc55e11df1ad1e8d2490500b1f89e72d83e0c7fc09f03
387
+ hash: sha256:4a1e6dacba9c1fe7866b2b8a0041837a63acbe5c072185e9f73f809b94de22a6
388
388
  type: core
389
- size: 8472
389
+ size: 8585
390
390
  - path: core/elicitation/agent-elicitation.js
391
391
  hash: sha256:92abc291cecff9b8bb9153d5fbac84ad5217cff4d0d01e0495785a939334cd81
392
392
  type: elicitation
@@ -1272,9 +1272,9 @@ files:
1272
1272
  type: data
1273
1273
  size: 9587
1274
1274
  - path: data/entity-registry.yaml
1275
- hash: sha256:811b79bf0618af5c0f313958202863a3cd9ba50f4e6930eaa77577cbe747dffe
1275
+ hash: sha256:fd4f70968103b4731567c7ac4529a97c68ad973f7dc5005abcc7b12b06b8f95a
1276
1276
  type: data
1277
- size: 520811
1277
+ size: 520416
1278
1278
  - path: data/learned-patterns.yaml
1279
1279
  hash: sha256:1a4cd045c087b9dfd7046ff1464a9d2edb85fba77cf0b6fba14f4bb9004c741e
1280
1280
  type: data
@@ -3868,9 +3868,9 @@ files:
3868
3868
  type: monitor
3869
3869
  size: 861
3870
3870
  - path: package.json
3871
- hash: sha256:18000d777759b5e90fda49c1dd1218db387a915b4ed509247bb7d191cc96bd03
3871
+ hash: sha256:a79897e7e5ce54e4dec3baea4020b96f4c9c41e23c49511becf7438761362400
3872
3872
  type: other
3873
- size: 2539
3873
+ size: 2509
3874
3874
  - path: product/checklists/accessibility-wcag-checklist.md
3875
3875
  hash: sha256:11f340683187a9683c173b6f11b292eb1e49cca8844297a6bdb2631e46b8513a
3876
3876
  type: checklist
@@ -43,8 +43,7 @@
43
43
  "inquirer": "^8.2.6",
44
44
  "js-yaml": "^4.1.0",
45
45
  "semver": "^7.7.2",
46
- "tar": "^7.5.7",
47
- "validator": "^13.15.15"
46
+ "tar": "^7.5.7"
48
47
  },
49
48
  "peerDependencies": {
50
49
  "@sinapse-fullstack/memory": "^4.31.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sinapse-ai",
3
- "version": "1.4.1",
3
+ "version": "1.4.2",
4
4
  "description": "SINAPSE AI: Framework de orquestracao de IA — 18 squads, 189 agentes especializados",
5
5
  "bin": {
6
6
  "sinapse": "bin/sinapse.js",
@@ -20,24 +20,39 @@ const os = require('os');
20
20
  function findCliPath() {
21
21
  const HOME = os.homedir();
22
22
 
23
- // Caminhos possiveis (npm global, nvm, default)
24
- const candidates = [
25
- path.join(HOME, '.npm-global/lib/node_modules/@anthropic-ai/claude-code/cli.js'),
26
- path.join(HOME, '.nvm/versions/node', process.version, 'lib/node_modules/@anthropic-ai/claude-code/cli.js'),
27
- // npm root -g
28
- '/usr/local/lib/node_modules/@anthropic-ai/claude-code/cli.js',
29
- '/usr/lib/node_modules/@anthropic-ai/claude-code/cli.js',
30
- ];
31
-
32
- // Tenta npm root -g como fallback
23
+ // v1.4.2 fix: include Windows npm-global path + multiple entry-point
24
+ // filename variants. Claude Code 2.x on Windows ships cli-wrapper.cjs at
25
+ // the package root, with the actual cli.js inside bin/.
26
+
27
+ // Try `npm root -g` first (most reliable cross-platform).
28
+ let npmRoot = null;
33
29
  try {
34
30
  const { execSync } = require('child_process');
35
- const npmRoot = execSync('npm root -g', { encoding: 'utf8' }).trim();
36
- candidates.unshift(path.join(npmRoot, '@anthropic-ai/claude-code/cli.js'));
37
- } catch {}
31
+ npmRoot = execSync('npm root -g', { encoding: 'utf8' }).trim();
32
+ } catch {
33
+ /* ignore — fall back to platform-specific defaults */
34
+ }
38
35
 
39
- for (const p of candidates) {
40
- if (fs.existsSync(p)) return p;
36
+ const packageDirs = [];
37
+ if (npmRoot) {
38
+ packageDirs.push(path.join(npmRoot, '@anthropic-ai', 'claude-code'));
39
+ }
40
+ packageDirs.push(
41
+ path.join(HOME, '.npm-global', 'lib', 'node_modules', '@anthropic-ai', 'claude-code'),
42
+ path.join(HOME, '.nvm', 'versions', 'node', process.version, 'lib', 'node_modules', '@anthropic-ai', 'claude-code'),
43
+ path.join(HOME, 'AppData', 'Roaming', 'npm', 'node_modules', '@anthropic-ai', 'claude-code'),
44
+ '/usr/local/lib/node_modules/@anthropic-ai/claude-code',
45
+ '/usr/lib/node_modules/@anthropic-ai/claude-code',
46
+ );
47
+
48
+ // Multiple possible entry-point filenames across versions/platforms.
49
+ const entryFiles = ['cli.js', 'cli-wrapper.cjs', path.join('bin', 'cli.js')];
50
+
51
+ for (const pkgDir of packageDirs) {
52
+ for (const entry of entryFiles) {
53
+ const candidate = path.join(pkgDir, entry);
54
+ if (fs.existsSync(candidate)) return candidate;
55
+ }
41
56
  }
42
57
  return null;
43
58
  }
@@ -45,10 +60,13 @@ function findCliPath() {
45
60
  const CLI_PATH = findCliPath();
46
61
 
47
62
  if (!CLI_PATH) {
48
- console.error('\n[ERRO] Claude Code CLI nao encontrado.');
49
- console.error('Certifique-se de ter instalado com: npm install -g @anthropic-ai/claude-code');
50
- console.error('Depois rode este script novamente.\n');
51
- process.exit(1);
63
+ // v1.4.2: branding patch is OPTIONAL cosmetic — not finding Claude Code
64
+ // is not an error. Downgrade message from [ERRO] to [INFO] and exit 0
65
+ // so it never blocks the install pipeline.
66
+ console.log('\n[INFO] Claude Code CLI nao encontrado — branding patch ignorado.');
67
+ console.log(' (Patch e opcional. Para aplicar, instale Claude Code globalmente:');
68
+ console.log(' npm install -g @anthropic-ai/claude-code, e rode este script.)\n');
69
+ process.exit(0);
52
70
  }
53
71
 
54
72
  console.log('CLI encontrado em:', CLI_PATH);