@liangjie559567/ultrapower 5.1.0 → 5.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 (78) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/dist/__tests__/skills.test.js +3 -2
  3. package/dist/__tests__/skills.test.js.map +1 -1
  4. package/dist/hooks/nexus/__tests__/config.test.d.ts +2 -0
  5. package/dist/hooks/nexus/__tests__/config.test.d.ts.map +1 -0
  6. package/dist/hooks/nexus/__tests__/config.test.js +38 -0
  7. package/dist/hooks/nexus/__tests__/config.test.js.map +1 -0
  8. package/dist/hooks/nexus/__tests__/consciousness-sync.test.d.ts +2 -0
  9. package/dist/hooks/nexus/__tests__/consciousness-sync.test.d.ts.map +1 -0
  10. package/dist/hooks/nexus/__tests__/consciousness-sync.test.js +28 -0
  11. package/dist/hooks/nexus/__tests__/consciousness-sync.test.js.map +1 -0
  12. package/dist/hooks/nexus/__tests__/data-collector.test.d.ts +2 -0
  13. package/dist/hooks/nexus/__tests__/data-collector.test.d.ts.map +1 -0
  14. package/dist/hooks/nexus/__tests__/data-collector.test.js +61 -0
  15. package/dist/hooks/nexus/__tests__/data-collector.test.js.map +1 -0
  16. package/dist/hooks/nexus/__tests__/improvement-puller.test.d.ts +2 -0
  17. package/dist/hooks/nexus/__tests__/improvement-puller.test.d.ts.map +1 -0
  18. package/dist/hooks/nexus/__tests__/improvement-puller.test.js +49 -0
  19. package/dist/hooks/nexus/__tests__/improvement-puller.test.js.map +1 -0
  20. package/dist/hooks/nexus/__tests__/session-end-hook.test.d.ts +2 -0
  21. package/dist/hooks/nexus/__tests__/session-end-hook.test.d.ts.map +1 -0
  22. package/dist/hooks/nexus/__tests__/session-end-hook.test.js +39 -0
  23. package/dist/hooks/nexus/__tests__/session-end-hook.test.js.map +1 -0
  24. package/dist/hooks/nexus/config.d.ts +5 -0
  25. package/dist/hooks/nexus/config.d.ts.map +1 -0
  26. package/dist/hooks/nexus/config.js +35 -0
  27. package/dist/hooks/nexus/config.js.map +1 -0
  28. package/dist/hooks/nexus/consciousness-sync.d.ts +8 -0
  29. package/dist/hooks/nexus/consciousness-sync.d.ts.map +1 -0
  30. package/dist/hooks/nexus/consciousness-sync.js +57 -0
  31. package/dist/hooks/nexus/consciousness-sync.js.map +1 -0
  32. package/dist/hooks/nexus/data-collector.d.ts +4 -0
  33. package/dist/hooks/nexus/data-collector.d.ts.map +1 -0
  34. package/dist/hooks/nexus/data-collector.js +23 -0
  35. package/dist/hooks/nexus/data-collector.js.map +1 -0
  36. package/dist/hooks/nexus/improvement-puller.d.ts +9 -0
  37. package/dist/hooks/nexus/improvement-puller.d.ts.map +1 -0
  38. package/dist/hooks/nexus/improvement-puller.js +42 -0
  39. package/dist/hooks/nexus/improvement-puller.js.map +1 -0
  40. package/dist/hooks/nexus/session-end-hook.d.ts +16 -0
  41. package/dist/hooks/nexus/session-end-hook.d.ts.map +1 -0
  42. package/dist/hooks/nexus/session-end-hook.js +49 -0
  43. package/dist/hooks/nexus/session-end-hook.js.map +1 -0
  44. package/dist/hooks/nexus/types.d.ts +54 -0
  45. package/dist/hooks/nexus/types.d.ts.map +1 -0
  46. package/dist/hooks/nexus/types.js +2 -0
  47. package/dist/hooks/nexus/types.js.map +1 -0
  48. package/dist/hooks/session-end/__tests__/nexus-integration.test.d.ts +2 -0
  49. package/dist/hooks/session-end/__tests__/nexus-integration.test.d.ts.map +1 -0
  50. package/dist/hooks/session-end/__tests__/nexus-integration.test.js +30 -0
  51. package/dist/hooks/session-end/__tests__/nexus-integration.test.js.map +1 -0
  52. package/dist/hooks/session-end/index.d.ts.map +1 -1
  53. package/dist/hooks/session-end/index.js +15 -0
  54. package/dist/hooks/session-end/index.js.map +1 -1
  55. package/docs/CLAUDE.md +1 -1
  56. package/docs/README.codex.md +6 -0
  57. package/docs/plans/2026-01-17-visual-brainstorming.md +571 -0
  58. package/docs/plans/2026-02-26-nexus-design.md +354 -0
  59. package/docs/plans/2026-02-26-nexus-implementation-plan.md +2538 -0
  60. package/docs/plans/2026-02-26-phase2-active-learning-design.md +377 -0
  61. package/docs/standards/contribution-guide.md +52 -1
  62. package/docs/superpowers/plans/2026-01-22-document-review-system.md +301 -0
  63. package/docs/superpowers/plans/2026-02-19-visual-brainstorming-refactor.md +523 -0
  64. package/docs/superpowers/specs/2026-01-22-document-review-system-design.md +136 -0
  65. package/docs/superpowers/specs/2026-02-19-visual-brainstorming-refactor-design.md +162 -0
  66. package/hooks/run-hook.cmd +32 -29
  67. package/package.json +4 -2
  68. package/skills/brainstorming/spec-document-reviewer-prompt.md +50 -0
  69. package/skills/brainstorming/visual-companion.md +249 -0
  70. package/skills/nexus/SKILL.md +35 -0
  71. package/skills/nexus/nexus-evolve/SKILL.md +31 -0
  72. package/skills/nexus/nexus-review/SKILL.md +39 -0
  73. package/skills/nexus/nexus-status/SKILL.md +31 -0
  74. package/skills/release/SKILL.md +3 -0
  75. package/skills/requesting-code-review/SKILL.md +1 -1
  76. package/skills/using-superpowers/references/codex-tools.md +25 -0
  77. package/skills/writing-plans/plan-document-reviewer-prompt.md +52 -0
  78. /package/hooks/{session-start.sh → session-start} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ultrapower",
3
3
  "description": "Disciplined multi-agent orchestration: workflow enforcement + parallel execution. Combines superpowers' TDD/debugging discipline with OMC's multi-agent execution capabilities.",
4
- "version": "5.1.0",
4
+ "version": "5.2.0",
5
5
  "author": {
6
6
  "name": "Jesse Vincent & oh-my-claudecode contributors"
7
7
  },
@@ -8,7 +8,7 @@ describe('Builtin Skills', () => {
8
8
  describe('createBuiltinSkills()', () => {
9
9
  it('should return correct number of skills (70)', () => {
10
10
  const skills = createBuiltinSkills();
11
- expect(skills).toHaveLength(70);
11
+ expect(skills).toHaveLength(71);
12
12
  });
13
13
  it('should return an array of BuiltinSkill objects', () => {
14
14
  const skills = createBuiltinSkills();
@@ -121,6 +121,7 @@ describe('Builtin Skills', () => {
121
121
  'writing-plans',
122
122
  'wizard',
123
123
  'writing-skills',
124
+ 'nexus',
124
125
  ];
125
126
  const actualSkillNames = skills.map((s) => s.name);
126
127
  expect(actualSkillNames).toEqual(expect.arrayContaining(expectedSkills));
@@ -157,7 +158,7 @@ describe('Builtin Skills', () => {
157
158
  describe('listBuiltinSkillNames()', () => {
158
159
  it('should return all skill names', () => {
159
160
  const names = listBuiltinSkillNames();
160
- expect(names).toHaveLength(70);
161
+ expect(names).toHaveLength(71);
161
162
  expect(names).toContain('autopilot');
162
163
  expect(names).toContain('cancel');
163
164
  expect(names).toContain('ccg');
@@ -1 +1 @@
1
- {"version":3,"file":"skills.test.js","sourceRoot":"","sources":["../../src/__tests__/skills.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills.test.js","sourceRoot":"","sources":["../../src/__tests__/skills.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../../../src/hooks/nexus/__tests__/config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { mkdirSync, rmSync, writeFileSync } from 'fs';
3
+ import { join } from 'path';
4
+ import { tmpdir } from 'os';
5
+ import { loadNexusConfig, DEFAULT_NEXUS_CONFIG } from '../config.js';
6
+ describe('loadNexusConfig', () => {
7
+ let tmpDir;
8
+ beforeEach(() => {
9
+ tmpDir = join(tmpdir(), `nexus-test-${Date.now()}`);
10
+ mkdirSync(tmpDir, { recursive: true });
11
+ });
12
+ afterEach(() => {
13
+ rmSync(tmpDir, { recursive: true, force: true });
14
+ });
15
+ it('returns default config when file does not exist', () => {
16
+ const config = loadNexusConfig(tmpDir);
17
+ expect(config).toEqual(DEFAULT_NEXUS_CONFIG);
18
+ });
19
+ it('loads and merges config from .omc/nexus/config.json', () => {
20
+ const configDir = join(tmpDir, '.omc', 'nexus');
21
+ mkdirSync(configDir, { recursive: true });
22
+ writeFileSync(join(configDir, 'config.json'), JSON.stringify({ enabled: true, gitRemote: 'git@github.com:user/nexus-daemon.git' }));
23
+ const config = loadNexusConfig(tmpDir);
24
+ expect(config.enabled).toBe(true);
25
+ expect(config.gitRemote).toBe('git@github.com:user/nexus-daemon.git');
26
+ expect(config.autoApplyThreshold).toBe(80);
27
+ expect(config.consciousnessInterval).toBe(300);
28
+ expect(config.consciousnessBudgetPercent).toBe(10);
29
+ });
30
+ it('returns default config on malformed JSON', () => {
31
+ const configDir = join(tmpDir, '.omc', 'nexus');
32
+ mkdirSync(configDir, { recursive: true });
33
+ writeFileSync(join(configDir, 'config.json'), 'not json');
34
+ const config = loadNexusConfig(tmpDir);
35
+ expect(config.enabled).toBe(false);
36
+ });
37
+ });
38
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../../../src/hooks/nexus/__tests__/config.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAErE,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,MAAc,CAAC;IACnB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACpD,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAChD,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,aAAa,CACX,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,EAC9B,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,sCAAsC,EAAE,CAAC,CACrF,CAAC;QACF,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACtE,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAChD,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,UAAU,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=consciousness-sync.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consciousness-sync.test.d.ts","sourceRoot":"","sources":["../../../../src/hooks/nexus/__tests__/consciousness-sync.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { syncToRemote, buildGitCommitMessage } from '../consciousness-sync.js';
3
+ describe('buildGitCommitMessage', () => {
4
+ it('includes session ID in commit message', () => {
5
+ const msg = buildGitCommitMessage('abc123', 3);
6
+ expect(msg).toContain('abc123');
7
+ expect(msg).toContain('3 event');
8
+ });
9
+ it('sanitizes special characters in session ID', () => {
10
+ const msg = buildGitCommitMessage('abc/123!@#', 1);
11
+ expect(msg).not.toContain('/');
12
+ expect(msg).not.toContain('!');
13
+ expect(msg).not.toContain('@');
14
+ expect(msg).not.toContain('#');
15
+ });
16
+ it('truncates session ID to 8 characters', () => {
17
+ const msg = buildGitCommitMessage('abcdefghijklmnop', 2);
18
+ expect(msg).toContain('abcdefgh');
19
+ expect(msg).not.toContain('abcdefghi');
20
+ });
21
+ });
22
+ describe('syncToRemote', () => {
23
+ it('returns false when nexus is disabled', async () => {
24
+ const result = await syncToRemote('/nonexistent/dir', 'sess-001');
25
+ expect(result.success).toBe(false);
26
+ });
27
+ });
28
+ //# sourceMappingURL=consciousness-sync.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consciousness-sync.test.js","sourceRoot":"","sources":["../../../../src/hooks/nexus/__tests__/consciousness-sync.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAE/E,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,GAAG,GAAG,qBAAqB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,GAAG,GAAG,qBAAqB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,GAAG,GAAG,qBAAqB,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data-collector.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-collector.test.d.ts","sourceRoot":"","sources":["../../../../src/hooks/nexus/__tests__/data-collector.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,61 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { mkdirSync, rmSync, existsSync, readFileSync, readdirSync, writeFileSync } from 'fs';
3
+ import { join } from 'path';
4
+ import { tmpdir } from 'os';
5
+ import { collectSessionEvent, getEventsDir } from '../data-collector.js';
6
+ describe('collectSessionEvent', () => {
7
+ let tmpDir;
8
+ beforeEach(() => {
9
+ tmpDir = join(tmpdir(), `nexus-dc-test-${Date.now()}`);
10
+ mkdirSync(tmpDir, { recursive: true });
11
+ // Enable nexus in config
12
+ const configDir = join(tmpDir, '.omc', 'nexus');
13
+ mkdirSync(configDir, { recursive: true });
14
+ writeFileSync(join(configDir, 'config.json'), JSON.stringify({ enabled: true }));
15
+ });
16
+ afterEach(() => {
17
+ rmSync(tmpDir, { recursive: true, force: true });
18
+ });
19
+ it('writes event JSON to .omc/nexus/events/', async () => {
20
+ const event = {
21
+ sessionId: 'test-session-123',
22
+ timestamp: '2026-02-26T14:00:00Z',
23
+ directory: tmpDir,
24
+ toolCalls: [],
25
+ agentsSpawned: 2,
26
+ agentsCompleted: 2,
27
+ modesUsed: ['ultrawork'],
28
+ skillsInjected: [],
29
+ patternsSeen: [],
30
+ };
31
+ await collectSessionEvent(tmpDir, event);
32
+ const eventsDir = getEventsDir(tmpDir);
33
+ expect(existsSync(eventsDir)).toBe(true);
34
+ const files = readdirSync(eventsDir);
35
+ expect(files.length).toBe(1);
36
+ expect(files[0]).toMatch(/^test-session-123-\d+\.json$/);
37
+ const content = JSON.parse(readFileSync(join(eventsDir, files[0]), 'utf-8'));
38
+ expect(content.sessionId).toBe('test-session-123');
39
+ expect(content.agentsSpawned).toBe(2);
40
+ });
41
+ it('does nothing when nexus is disabled', async () => {
42
+ const disabledDir = join(tmpdir(), `nexus-disabled-${Date.now()}`);
43
+ mkdirSync(disabledDir, { recursive: true });
44
+ const event = {
45
+ sessionId: 'test-session-456',
46
+ timestamp: '2026-02-26T14:00:00Z',
47
+ directory: disabledDir,
48
+ toolCalls: [],
49
+ agentsSpawned: 0,
50
+ agentsCompleted: 0,
51
+ modesUsed: [],
52
+ skillsInjected: [],
53
+ patternsSeen: [],
54
+ };
55
+ await collectSessionEvent(disabledDir, event);
56
+ const eventsDir = getEventsDir(disabledDir);
57
+ expect(existsSync(eventsDir)).toBe(false);
58
+ rmSync(disabledDir, { recursive: true, force: true });
59
+ });
60
+ });
61
+ //# sourceMappingURL=data-collector.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-collector.test.js","sourceRoot":"","sources":["../../../../src/hooks/nexus/__tests__/data-collector.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=improvement-puller.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improvement-puller.test.d.ts","sourceRoot":"","sources":["../../../../src/hooks/nexus/__tests__/improvement-puller.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,49 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { mkdirSync, writeFileSync, rmSync } from 'fs';
3
+ import { join } from 'path';
4
+ import { tmpdir } from 'os';
5
+ import { loadPendingImprovements } from '../improvement-puller.js';
6
+ describe('loadPendingImprovements', () => {
7
+ let testDir;
8
+ beforeEach(() => {
9
+ testDir = join(tmpdir(), `nexus-test-${Date.now()}`);
10
+ mkdirSync(testDir, { recursive: true });
11
+ });
12
+ afterEach(() => {
13
+ rmSync(testDir, { recursive: true, force: true });
14
+ });
15
+ it('returns empty array when no improvement files', () => {
16
+ const result = loadPendingImprovements(testDir);
17
+ expect(result).toEqual([]);
18
+ });
19
+ it('loads pending improvement files', () => {
20
+ const improvementsDir = join(testDir, '.omc/nexus/improvements');
21
+ mkdirSync(improvementsDir, { recursive: true });
22
+ const imp = {
23
+ id: 'imp-001',
24
+ createdAt: '2026-02-26T00:00:00Z',
25
+ source: 'evolution_engine',
26
+ type: 'skill_update',
27
+ targetFile: 'skills/test/SKILL.md',
28
+ confidence: 85,
29
+ diff: '--- a\n+++ b',
30
+ reason: 'test reason',
31
+ evidence: {},
32
+ status: 'pending',
33
+ testResult: null,
34
+ };
35
+ writeFileSync(join(improvementsDir, 'imp-001.json'), JSON.stringify(imp));
36
+ const result = loadPendingImprovements(testDir);
37
+ expect(result).toHaveLength(1);
38
+ expect(result[0].id).toBe('imp-001');
39
+ });
40
+ it('skips non-pending improvements', () => {
41
+ const improvementsDir = join(testDir, '.omc/nexus/improvements');
42
+ mkdirSync(improvementsDir, { recursive: true });
43
+ const applied = { id: 'imp-002', status: 'applied' };
44
+ writeFileSync(join(improvementsDir, 'imp-002.json'), JSON.stringify(applied));
45
+ const result = loadPendingImprovements(testDir);
46
+ expect(result).toEqual([]);
47
+ });
48
+ });
49
+ //# sourceMappingURL=improvement-puller.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improvement-puller.test.js","sourceRoot":"","sources":["../../../../src/hooks/nexus/__tests__/improvement-puller.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,IAAI,OAAe,CAAC;IAEpB,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACrD,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;QACjE,SAAS,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG;YACV,EAAE,EAAE,SAAS;YACb,SAAS,EAAE,sBAAsB;YACjC,MAAM,EAAE,kBAAkB;YAC1B,IAAI,EAAE,cAAc;YACpB,UAAU,EAAE,sBAAsB;YAClC,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,cAAc;YACpB,MAAM,EAAE,aAAa;YACrB,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,IAAI;SACjB,CAAC;QACF,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;QACjE,SAAS,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QACrD,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=session-end-hook.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-end-hook.test.d.ts","sourceRoot":"","sources":["../../../../src/hooks/nexus/__tests__/session-end-hook.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,39 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { mkdirSync, rmSync, writeFileSync } from 'fs';
3
+ import { join } from 'path';
4
+ import { tmpdir } from 'os';
5
+ import { handleNexusSessionEnd } from '../session-end-hook.js';
6
+ describe('handleNexusSessionEnd', () => {
7
+ let tmpDir;
8
+ beforeEach(() => {
9
+ tmpDir = join(tmpdir(), `nexus-se-test-${Date.now()}`);
10
+ mkdirSync(join(tmpDir, '.omc', 'nexus'), { recursive: true });
11
+ writeFileSync(join(tmpDir, '.omc', 'nexus', 'config.json'), JSON.stringify({ enabled: true, gitRemote: '' }) // no remote = no push
12
+ );
13
+ });
14
+ afterEach(() => {
15
+ rmSync(tmpDir, { recursive: true, force: true });
16
+ });
17
+ it('collects event and returns result', async () => {
18
+ const result = await handleNexusSessionEnd({
19
+ sessionId: 'test-sess-789',
20
+ directory: tmpDir,
21
+ durationMs: 60000,
22
+ agentsSpawned: 1,
23
+ agentsCompleted: 1,
24
+ modesUsed: ['ultrawork'],
25
+ });
26
+ expect(result.collected).toBe(true);
27
+ // sync skipped because gitRemote is empty
28
+ expect(result.synced).toBe(false);
29
+ });
30
+ it('returns not collected when nexus disabled', async () => {
31
+ writeFileSync(join(tmpDir, '.omc', 'nexus', 'config.json'), JSON.stringify({ enabled: false }));
32
+ const result = await handleNexusSessionEnd({
33
+ sessionId: 'test-sess-000',
34
+ directory: tmpDir,
35
+ });
36
+ expect(result.collected).toBe(false);
37
+ });
38
+ });
39
+ //# sourceMappingURL=session-end-hook.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-end-hook.test.js","sourceRoot":"","sources":["../../../../src/hooks/nexus/__tests__/session-end-hook.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAM,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,IAAI,MAAc,CAAC;IAEnB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,iBAAiB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACvD,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,aAAa,CACX,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,EAC5C,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,sBAAsB;SACxE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC;YACzC,SAAS,EAAE,eAAe;YAC1B,SAAS,EAAE,MAAM;YACjB,UAAU,EAAE,KAAK;YACjB,aAAa,EAAE,CAAC;YAChB,eAAe,EAAE,CAAC;YAClB,SAAS,EAAE,CAAC,WAAW,CAAC;SACzB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,0CAA0C;QAC1C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,aAAa,CACX,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,EAC5C,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CACnC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC;YACzC,SAAS,EAAE,eAAe;YAC1B,SAAS,EAAE,MAAM;SAClB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { NexusConfig } from './types.js';
2
+ export declare const DEFAULT_NEXUS_CONFIG: NexusConfig;
3
+ export declare function loadNexusConfig(directory: string): NexusConfig;
4
+ export declare function isNexusEnabled(directory: string): boolean;
5
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/hooks/nexus/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,eAAO,MAAM,oBAAoB,EAAE,WAMlC,CAAC;AAIF,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAkB9D;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEzD"}
@@ -0,0 +1,35 @@
1
+ import { existsSync, readFileSync } from 'fs';
2
+ import { join } from 'path';
3
+ const DEBUG_ENABLED = process.env.OMC_DEBUG === '1';
4
+ export const DEFAULT_NEXUS_CONFIG = {
5
+ enabled: false,
6
+ gitRemote: '',
7
+ autoApplyThreshold: 80,
8
+ consciousnessInterval: 300,
9
+ consciousnessBudgetPercent: 10,
10
+ };
11
+ const CONFIG_RELATIVE_PATH = '.omc/nexus/config.json';
12
+ export function loadNexusConfig(directory) {
13
+ const configPath = join(directory, CONFIG_RELATIVE_PATH);
14
+ if (!existsSync(configPath)) {
15
+ return { ...DEFAULT_NEXUS_CONFIG };
16
+ }
17
+ try {
18
+ const raw = readFileSync(configPath, 'utf-8');
19
+ const parsed = JSON.parse(raw);
20
+ if (typeof parsed !== 'object' || parsed === null) {
21
+ return { ...DEFAULT_NEXUS_CONFIG };
22
+ }
23
+ return { ...DEFAULT_NEXUS_CONFIG, ...parsed };
24
+ }
25
+ catch (error) {
26
+ if (DEBUG_ENABLED) {
27
+ console.error('[nexus] Error loading config:', error);
28
+ }
29
+ return { ...DEFAULT_NEXUS_CONFIG };
30
+ }
31
+ }
32
+ export function isNexusEnabled(directory) {
33
+ return loadNexusConfig(directory).enabled;
34
+ }
35
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/hooks/nexus/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC;AAEpD,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC/C,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,EAAE;IACb,kBAAkB,EAAE,EAAE;IACtB,qBAAqB,EAAE,GAAG;IAC1B,0BAA0B,EAAE,EAAE;CAC/B,CAAC;AAEF,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AAEtD,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IACzD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,GAAG,oBAAoB,EAAE,CAAC;IACrC,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAClD,OAAO,EAAE,GAAG,oBAAoB,EAAE,CAAC;QACrC,CAAC;QACD,OAAO,EAAE,GAAG,oBAAoB,EAAE,GAAI,MAA+B,EAAE,CAAC;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,EAAE,GAAG,oBAAoB,EAAE,CAAC;IACrC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface SyncResult {
2
+ success: boolean;
3
+ error?: string;
4
+ filesCommitted?: number;
5
+ }
6
+ export declare function buildGitCommitMessage(sessionId: string, fileCount: number): string;
7
+ export declare function syncToRemote(directory: string, sessionId: string): Promise<SyncResult>;
8
+ //# sourceMappingURL=consciousness-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consciousness-sync.d.ts","sourceRoot":"","sources":["../../../src/hooks/nexus/consciousness-sync.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGlF;AAWD,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CA6C5F"}
@@ -0,0 +1,57 @@
1
+ import { spawnSync } from 'child_process';
2
+ import { existsSync } from 'fs';
3
+ import { join } from 'path';
4
+ import { isNexusEnabled, loadNexusConfig } from './config.js';
5
+ import { getEventsDir } from './data-collector.js';
6
+ export function buildGitCommitMessage(sessionId, fileCount) {
7
+ const safeId = sessionId.replace(/[^a-zA-Z0-9-]/g, '').slice(0, 8);
8
+ return `nexus: sync ${fileCount} event(s) from session ${safeId}`;
9
+ }
10
+ function git(args, cwd) {
11
+ const result = spawnSync('git', args, { cwd, encoding: 'utf-8' });
12
+ return {
13
+ ok: result.status === 0,
14
+ stdout: result.stdout ?? '',
15
+ stderr: result.stderr ?? '',
16
+ };
17
+ }
18
+ export async function syncToRemote(directory, sessionId) {
19
+ try {
20
+ if (!isNexusEnabled(directory)) {
21
+ return { success: false, error: 'nexus disabled' };
22
+ }
23
+ const config = loadNexusConfig(directory);
24
+ if (!config.gitRemote) {
25
+ return { success: false, error: 'gitRemote not configured' };
26
+ }
27
+ const eventsDir = getEventsDir(directory);
28
+ if (!existsSync(eventsDir)) {
29
+ return { success: true, filesCommitted: 0 };
30
+ }
31
+ const addResult = git(['add', join('.omc', 'nexus', 'events')], directory);
32
+ if (!addResult.ok) {
33
+ return { success: false, error: addResult.stderr };
34
+ }
35
+ const statusResult = git(['status', '--porcelain'], directory);
36
+ const nexusLines = statusResult.stdout
37
+ .split('\n')
38
+ .filter(l => l.includes('.omc/nexus/events'));
39
+ if (nexusLines.length === 0) {
40
+ return { success: true, filesCommitted: 0 };
41
+ }
42
+ const msg = buildGitCommitMessage(sessionId, nexusLines.length);
43
+ const commitResult = git(['commit', '-m', msg], directory);
44
+ if (!commitResult.ok) {
45
+ return { success: false, error: commitResult.stderr };
46
+ }
47
+ const pushResult = git(['push', 'origin', 'HEAD'], directory);
48
+ if (!pushResult.ok) {
49
+ return { success: false, error: pushResult.stderr };
50
+ }
51
+ return { success: true, filesCommitted: nexusLines.length };
52
+ }
53
+ catch (e) {
54
+ return { success: false, error: e instanceof Error ? e.message : String(e) };
55
+ }
56
+ }
57
+ //# sourceMappingURL=consciousness-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consciousness-sync.js","sourceRoot":"","sources":["../../../src/hooks/nexus/consciousness-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { SessionEvent } from './types.js';
2
+ export declare function getEventsDir(directory: string): string;
3
+ export declare function collectSessionEvent(directory: string, event: SessionEvent): Promise<void>;
4
+ //# sourceMappingURL=data-collector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-collector.d.ts","sourceRoot":"","sources":["../../../src/hooks/nexus/data-collector.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,IAAI,CAAC,CAef"}
@@ -0,0 +1,23 @@
1
+ import { mkdirSync, writeFileSync } from 'fs';
2
+ import { join } from 'path';
3
+ import { isNexusEnabled } from './config.js';
4
+ const EVENTS_SUBDIR = '.omc/nexus/events';
5
+ export function getEventsDir(directory) {
6
+ return join(directory, EVENTS_SUBDIR);
7
+ }
8
+ export async function collectSessionEvent(directory, event) {
9
+ try {
10
+ if (!isNexusEnabled(directory))
11
+ return;
12
+ const eventsDir = getEventsDir(directory);
13
+ mkdirSync(eventsDir, { recursive: true });
14
+ const timestamp = Date.now();
15
+ const filename = `${event.sessionId}-${timestamp}.json`;
16
+ const filePath = join(eventsDir, filename);
17
+ writeFileSync(filePath, JSON.stringify(event, null, 2), 'utf-8');
18
+ }
19
+ catch {
20
+ // Silent failure — must never break main flow
21
+ }
22
+ }
23
+ //# sourceMappingURL=data-collector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-collector.js","sourceRoot":"","sources":["../../../src/hooks/nexus/data-collector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAE1C,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC5C,OAAO,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAAiB,EACjB,KAAmB;IAEnB,IAAI,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;YAAE,OAAO;QAEvC,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1C,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,SAAS,IAAI,SAAS,OAAO,CAAC;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAE3C,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,8CAA8C;IAChD,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { ImprovementSuggestion } from './types.js';
2
+ export interface PullResult {
3
+ pulled: number;
4
+ improvements: ImprovementSuggestion[];
5
+ }
6
+ export declare function getImprovementsDir(directory: string): string;
7
+ export declare function loadPendingImprovements(directory: string): ImprovementSuggestion[];
8
+ export declare function pullImprovements(directory: string): PullResult;
9
+ //# sourceMappingURL=improvement-puller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improvement-puller.d.ts","sourceRoot":"","sources":["../../../src/hooks/nexus/improvement-puller.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,qBAAqB,EAAE,CAAC;CACvC;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE5D;AAWD,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAoBlF;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAG9D"}
@@ -0,0 +1,42 @@
1
+ import { existsSync, readdirSync, readFileSync } from 'fs';
2
+ import { join } from 'path';
3
+ export function getImprovementsDir(directory) {
4
+ return join(directory, '.omc/nexus/improvements');
5
+ }
6
+ function isValidImprovementSuggestion(obj) {
7
+ return (typeof obj === 'object' &&
8
+ obj !== null &&
9
+ 'id' in obj &&
10
+ 'status' in obj);
11
+ }
12
+ export function loadPendingImprovements(directory) {
13
+ const improvementsDir = getImprovementsDir(directory);
14
+ if (!existsSync(improvementsDir))
15
+ return [];
16
+ const results = [];
17
+ for (const file of readdirSync(improvementsDir)) {
18
+ if (!file.endsWith('.json'))
19
+ continue;
20
+ try {
21
+ const raw = readFileSync(join(improvementsDir, file), 'utf-8');
22
+ const imp = JSON.parse(raw);
23
+ if (!isValidImprovementSuggestion(imp))
24
+ continue;
25
+ if (imp.status === 'pending')
26
+ results.push(imp);
27
+ }
28
+ catch (err) {
29
+ if (!(err instanceof SyntaxError)) {
30
+ // Non-JSON parse error (e.g. file read failure) — log warning
31
+ console.warn(`[improvement-puller] failed to read file ${file}:`, err);
32
+ }
33
+ // SyntaxError = malformed JSON, silently skip
34
+ }
35
+ }
36
+ return results;
37
+ }
38
+ export function pullImprovements(directory) {
39
+ const improvements = loadPendingImprovements(directory);
40
+ return { pulled: improvements.length, improvements };
41
+ }
42
+ //# sourceMappingURL=improvement-puller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improvement-puller.js","sourceRoot":"","sources":["../../../src/hooks/nexus/improvement-puller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAQ5B,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,OAAO,IAAI,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,4BAA4B,CAAC,GAAY;IAChD,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,IAAI,IAAI,GAAG;QACX,QAAQ,IAAI,GAAG,CAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,SAAiB;IACvD,MAAM,eAAe,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;QAAE,OAAO,EAAE,CAAC;IAC5C,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QACtC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;YACvC,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC;gBAAE,SAAS;YACjD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,CAAC,GAAG,YAAY,WAAW,CAAC,EAAE,CAAC;gBAClC,8DAA8D;gBAC9D,OAAO,CAAC,IAAI,CAAC,4CAA4C,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;YACzE,CAAC;YACD,8CAA8C;QAChD,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,MAAM,YAAY,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACxD,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;AACvD,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface NexusSessionEndInput {
2
+ sessionId: string;
3
+ directory: string;
4
+ durationMs?: number;
5
+ agentsSpawned?: number;
6
+ agentsCompleted?: number;
7
+ modesUsed?: string[];
8
+ skillsInjected?: string[];
9
+ }
10
+ export interface NexusSessionEndResult {
11
+ collected: boolean;
12
+ synced: boolean;
13
+ error?: string;
14
+ }
15
+ export declare function handleNexusSessionEnd(input: NexusSessionEndInput): Promise<NexusSessionEndResult>;
16
+ //# sourceMappingURL=session-end-hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-end-hook.d.ts","sourceRoot":"","sources":["../../../src/hooks/nexus/session-end-hook.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,qBAAqB,CAAC,CAmDhC"}