@theihtisham/agent-shadow-brain 7.0.0 → 7.1.3

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 (130) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +47 -385
  3. package/dist/activity-cli.d.ts +3 -0
  4. package/dist/activity-cli.d.ts.map +1 -0
  5. package/dist/activity-cli.js +78 -0
  6. package/dist/activity-cli.js.map +1 -0
  7. package/dist/adapters/index.d.ts +2 -1
  8. package/dist/adapters/index.d.ts.map +1 -1
  9. package/dist/adapters/index.js +3 -2
  10. package/dist/adapters/index.js.map +1 -1
  11. package/dist/brain/activity-journal.d.ts +82 -0
  12. package/dist/brain/activity-journal.d.ts.map +1 -0
  13. package/dist/brain/activity-journal.js +314 -0
  14. package/dist/brain/activity-journal.js.map +1 -0
  15. package/dist/brain/activity-reporting.d.ts +14 -0
  16. package/dist/brain/activity-reporting.d.ts.map +1 -0
  17. package/dist/brain/activity-reporting.js +17 -0
  18. package/dist/brain/activity-reporting.js.map +1 -0
  19. package/dist/brain/auto-update.js +1 -1
  20. package/dist/brain/brain-portability.js +1 -1
  21. package/dist/brain/client-integrations.d.ts +61 -0
  22. package/dist/brain/client-integrations.d.ts.map +1 -0
  23. package/dist/brain/client-integrations.js +98 -0
  24. package/dist/brain/client-integrations.js.map +1 -0
  25. package/dist/brain/context-assembly.d.ts +76 -0
  26. package/dist/brain/context-assembly.d.ts.map +1 -0
  27. package/dist/brain/context-assembly.js +305 -0
  28. package/dist/brain/context-assembly.js.map +1 -0
  29. package/dist/brain/feature-settings.d.ts +58 -0
  30. package/dist/brain/feature-settings.d.ts.map +1 -0
  31. package/dist/brain/feature-settings.js +241 -0
  32. package/dist/brain/feature-settings.js.map +1 -0
  33. package/dist/brain/global-brain.d.ts +7 -0
  34. package/dist/brain/global-brain.d.ts.map +1 -1
  35. package/dist/brain/global-brain.js +19 -4
  36. package/dist/brain/global-brain.js.map +1 -1
  37. package/dist/brain/mcp-server.d.ts +23 -1
  38. package/dist/brain/mcp-server.d.ts.map +1 -1
  39. package/dist/brain/mcp-server.js +224 -24
  40. package/dist/brain/mcp-server.js.map +1 -1
  41. package/dist/brain/mcp-stdio.d.ts +12 -0
  42. package/dist/brain/mcp-stdio.d.ts.map +1 -0
  43. package/dist/brain/mcp-stdio.js +134 -0
  44. package/dist/brain/mcp-stdio.js.map +1 -0
  45. package/dist/brain/memory-annotations.d.ts +97 -0
  46. package/dist/brain/memory-annotations.d.ts.map +1 -0
  47. package/dist/brain/memory-annotations.js +388 -0
  48. package/dist/brain/memory-annotations.js.map +1 -0
  49. package/dist/brain/memory-graph.d.ts.map +1 -1
  50. package/dist/brain/memory-graph.js +12 -23
  51. package/dist/brain/memory-graph.js.map +1 -1
  52. package/dist/brain/memory-sources.d.ts +8 -0
  53. package/dist/brain/memory-sources.d.ts.map +1 -0
  54. package/dist/brain/memory-sources.js +27 -0
  55. package/dist/brain/memory-sources.js.map +1 -0
  56. package/dist/brain/orchestrator.js +1 -1
  57. package/dist/brain/subconscious.d.ts +21 -24
  58. package/dist/brain/subconscious.d.ts.map +1 -1
  59. package/dist/brain/subconscious.js +82 -218
  60. package/dist/brain/subconscious.js.map +1 -1
  61. package/dist/brain/task-workflow.d.ts +22 -0
  62. package/dist/brain/task-workflow.d.ts.map +1 -0
  63. package/dist/brain/task-workflow.js +182 -0
  64. package/dist/brain/task-workflow.js.map +1 -0
  65. package/dist/brain/workflow-skills.d.ts +86 -0
  66. package/dist/brain/workflow-skills.d.ts.map +1 -0
  67. package/dist/brain/workflow-skills.js +514 -0
  68. package/dist/brain/workflow-skills.js.map +1 -0
  69. package/dist/cli.js +21 -2
  70. package/dist/cli.js.map +1 -1
  71. package/dist/context-cli.d.ts +3 -0
  72. package/dist/context-cli.d.ts.map +1 -0
  73. package/dist/context-cli.js +56 -0
  74. package/dist/context-cli.js.map +1 -0
  75. package/dist/curation-cli.d.ts +4 -0
  76. package/dist/curation-cli.d.ts.map +1 -0
  77. package/dist/curation-cli.js +118 -0
  78. package/dist/curation-cli.js.map +1 -0
  79. package/dist/dashboard/live-workspace-html.d.ts +2 -0
  80. package/dist/dashboard/live-workspace-html.d.ts.map +1 -0
  81. package/dist/dashboard/live-workspace-html.js +893 -0
  82. package/dist/dashboard/live-workspace-html.js.map +1 -0
  83. package/dist/dashboard/server.d.ts +1 -0
  84. package/dist/dashboard/server.d.ts.map +1 -1
  85. package/dist/dashboard/server.js +53 -18
  86. package/dist/dashboard/server.js.map +1 -1
  87. package/dist/dashboard/v6-dashboard-html.d.ts +1 -1
  88. package/dist/dashboard/v6-dashboard-html.d.ts.map +1 -1
  89. package/dist/dashboard/v6-dashboard-html.js +7 -29
  90. package/dist/dashboard/v6-dashboard-html.js.map +1 -1
  91. package/dist/dashboard/workspace-api.d.ts +16 -0
  92. package/dist/dashboard/workspace-api.d.ts.map +1 -0
  93. package/dist/dashboard/workspace-api.js +309 -0
  94. package/dist/dashboard/workspace-api.js.map +1 -0
  95. package/dist/dashboard/workspace-html.d.ts +2 -0
  96. package/dist/dashboard/workspace-html.d.ts.map +1 -0
  97. package/dist/dashboard/workspace-html.js +2132 -0
  98. package/dist/dashboard/workspace-html.js.map +1 -0
  99. package/dist/index.d.ts +14 -0
  100. package/dist/index.d.ts.map +1 -1
  101. package/dist/index.js +10 -0
  102. package/dist/index.js.map +1 -1
  103. package/dist/integration-cli.d.ts +3 -0
  104. package/dist/integration-cli.d.ts.map +1 -0
  105. package/dist/integration-cli.js +14 -0
  106. package/dist/integration-cli.js.map +1 -0
  107. package/dist/types.d.ts +12 -3
  108. package/dist/types.d.ts.map +1 -1
  109. package/dist/workflow-cli.d.ts +3 -0
  110. package/dist/workflow-cli.d.ts.map +1 -0
  111. package/dist/workflow-cli.js +100 -0
  112. package/dist/workflow-cli.js.map +1 -0
  113. package/docs/WORKFLOW_INTEGRATION.md +105 -0
  114. package/docs/WORKSPACE.md +111 -0
  115. package/docs/assets/context-flow-v7.2.png +0 -0
  116. package/docs/assets/live-v7.1.3.png +0 -0
  117. package/docs/assets/memory-detail-v7.1.3.png +0 -0
  118. package/docs/assets/overview-v7.1.3.png +0 -0
  119. package/docs/assets/workspace-graph-v7.2.png +0 -0
  120. package/docs/assets/workspace-overview-v7.2.png +0 -0
  121. package/docs/launch/RELEASE_NOTES_v7.1.0.md +32 -0
  122. package/docs/launch/RELEASE_NOTES_v7.1.3.md +40 -0
  123. package/docs/launch/RELEASE_NOTES_v7.2.0.md +24 -0
  124. package/package.json +112 -207
  125. package/skills/shadow-debug/SKILL.md +16 -0
  126. package/skills/shadow-implement/SKILL.md +16 -0
  127. package/skills/shadow-release/SKILL.md +16 -0
  128. package/skills/shadow-research/SKILL.md +12 -0
  129. package/skills/shadow-review/SKILL.md +14 -0
  130. package/skills/shadow-workflow/SKILL.md +31 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAGxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,MAAM,YAAY,GAA0C;IACjE,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,iBAAiB,EAAE;IAC5C,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,EAAE;IACxC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,EAAE;IACjC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,EAAE;IACvC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,EAAE;IACjC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,EAAE;IACtC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,EAAE;IACjC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,EAAE;IACnC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,EAAE;IACvC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,EAAE;CACtC,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,IAAe;IAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;IAC7D,OAAO,OAAO,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,UAAkB;IAC1D,MAAM,QAAQ,GAAmB,EAAE,CAAC;IAEpC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3D,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC;QACzB,OAAe,CAAC,UAAU,GAAG,UAAU,CAAC;QACzC,IAAI,CAAC;YACH,IAAI,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC3B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,GACf,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAGxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,mFAAmF;AACnF,MAAM,CAAC,MAAM,YAAY,GAAuE;IAC9F,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,iBAAiB,EAAE;IAC5C,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,EAAE;IACxC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,EAAE;IACjC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,EAAE;IACvC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,EAAE;IACjC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,EAAE;IACtC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,EAAE;IACjC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,EAAE;IACnC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,EAAE;IACvC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,EAAE;CACtC,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,IAAe;IAC3C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,6CAA6C,CAAC,CAAC;IACzI,MAAM,OAAO,GAAG,YAAY,CAAC,IAAiC,CAAC,CAAC;IAChE,OAAO,OAAO,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,UAAkB;IAC1D,MAAM,QAAQ,GAAmB,EAAE,CAAC;IAEpC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3D,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC;QACzB,OAAe,CAAC,UAAU,GAAG,UAAU,CAAC;QACzC,IAAI,CAAC;YACH,IAAI,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC3B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,GACf,CAAC"}
@@ -0,0 +1,82 @@
1
+ export declare const ACTIVITY_JOURNAL_FILENAME = "activity-journal.json";
2
+ export declare const ACTIVITY_JOURNAL_LIMITS: Readonly<{
3
+ retained: 500;
4
+ page: 200;
5
+ bytes: number;
6
+ }>;
7
+ declare const KINDS: readonly ["session-start", "phase", "tool-start", "tool-end", "session-end"];
8
+ declare const SOURCES: readonly ["measured", "reported"];
9
+ declare const TRANSPORTS: readonly ["mcp", "cli", "host"];
10
+ declare const PHASES: readonly ["understand", "plan", "work", "verify"];
11
+ declare const OUTCOMES: readonly ["success", "error", "cancelled"];
12
+ export interface ActivityEventInput {
13
+ kind: typeof KINDS[number];
14
+ source: typeof SOURCES[number];
15
+ transport: typeof TRANSPORTS[number];
16
+ projectId?: string;
17
+ sessionId?: string;
18
+ agent?: string;
19
+ phase?: typeof PHASES[number];
20
+ tool?: string;
21
+ correlationId?: string;
22
+ outcome?: typeof OUTCOMES[number];
23
+ durationMs?: number;
24
+ }
25
+ export interface ActivityJournalEvent extends ActivityEventInput {
26
+ id: string;
27
+ sequence: number;
28
+ timestamp: string;
29
+ }
30
+ export interface ActivityJournalSnapshot {
31
+ schemaVersion: 1;
32
+ journalId: string | null;
33
+ revision: number;
34
+ nextSequence: number;
35
+ events: ActivityJournalEvent[];
36
+ }
37
+ export interface ActivityJournalReadOptions {
38
+ afterSequence?: number;
39
+ journalId?: string;
40
+ limit?: number;
41
+ projectId?: string;
42
+ }
43
+ export interface ActivityJournalPage {
44
+ journalId: string | null;
45
+ revision: number;
46
+ oldestSequence: number | null;
47
+ latestSequence: number;
48
+ nextAfterSequence: number;
49
+ hasMore: boolean;
50
+ gap: boolean;
51
+ reset: boolean;
52
+ /** Retention counts describe the journal, including when the page filters by project. */
53
+ retainedCount: number;
54
+ droppedCount: number;
55
+ events: ActivityJournalEvent[];
56
+ }
57
+ export interface ActivityJournalOptions {
58
+ filePath?: string;
59
+ lockTimeoutMs?: number;
60
+ }
61
+ export declare class ActivityJournalError extends Error {
62
+ readonly code: 'ACTIVITY_JOURNAL_INVALID_EVENT' | 'ACTIVITY_JOURNAL_INVALID_CURSOR' | 'ACTIVITY_JOURNAL_INVALID_STORE' | 'ACTIVITY_JOURNAL_READ_FAILED' | 'ACTIVITY_JOURNAL_LOCK_TIMEOUT' | 'ACTIVITY_JOURNAL_LOCK_FAILED' | 'ACTIVITY_JOURNAL_WRITE_FAILED';
63
+ constructor(code: 'ACTIVITY_JOURNAL_INVALID_EVENT' | 'ACTIVITY_JOURNAL_INVALID_CURSOR' | 'ACTIVITY_JOURNAL_INVALID_STORE' | 'ACTIVITY_JOURNAL_READ_FAILED' | 'ACTIVITY_JOURNAL_LOCK_TIMEOUT' | 'ACTIVITY_JOURNAL_LOCK_FAILED' | 'ACTIVITY_JOURNAL_WRITE_FAILED', message: string);
64
+ }
65
+ /** Local metadata journal shared by cooperating service processes. */
66
+ export declare class ActivityJournal {
67
+ readonly filePath: string;
68
+ private readonly lockTimeoutMs;
69
+ constructor(options?: ActivityJournalOptions);
70
+ get(): ActivityJournalSnapshot;
71
+ read(options?: ActivityJournalReadOptions): ActivityJournalPage;
72
+ append(raw: unknown): Promise<ActivityJournalEvent>;
73
+ private checkFile;
74
+ private acquireLock;
75
+ private releaseLock;
76
+ private replace;
77
+ }
78
+ export declare function activityJournalFor(brain: {
79
+ dbPath: string;
80
+ }): ActivityJournal;
81
+ export {};
82
+ //# sourceMappingURL=activity-journal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-journal.d.ts","sourceRoot":"","sources":["../../src/brain/activity-journal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,314 @@
1
+ import * as fs from 'node:fs';
2
+ import * as os from 'node:os';
3
+ import * as path from 'node:path';
4
+ import { randomUUID } from 'node:crypto';
5
+ import { setTimeout as delay } from 'node:timers/promises';
6
+ export const ACTIVITY_JOURNAL_FILENAME = 'activity-journal.json';
7
+ export const ACTIVITY_JOURNAL_LIMITS = Object.freeze({ retained: 500, page: 200, bytes: 1024 * 1024 });
8
+ const KINDS = ['session-start', 'phase', 'tool-start', 'tool-end', 'session-end'];
9
+ const SOURCES = ['measured', 'reported'];
10
+ const TRANSPORTS = ['mcp', 'cli', 'host'];
11
+ const PHASES = ['understand', 'plan', 'work', 'verify'];
12
+ const OUTCOMES = ['success', 'error', 'cancelled'];
13
+ export class ActivityJournalError extends Error {
14
+ constructor(code, message) {
15
+ super(message);
16
+ this.code = code;
17
+ this.name = 'ActivityJournalError';
18
+ }
19
+ }
20
+ const INPUT_KEYS = new Set([
21
+ 'kind', 'source', 'transport', 'projectId', 'sessionId', 'agent', 'phase', 'tool', 'correlationId', 'outcome', 'durationMs',
22
+ ]);
23
+ const SNAPSHOT_KEYS = new Set(['schemaVersion', 'journalId', 'revision', 'nextSequence', 'events']);
24
+ const LOCK_TIMEOUT_MS = 3000;
25
+ const LOCK_POLL_MS = 20;
26
+ // Windows can report a sharing error while the previous owner removes the
27
+ // exclusive lock. A persistent permission error still fails at the deadline.
28
+ const RETRYABLE_LOCK_OPEN = new Set(['EEXIST', 'EACCES', 'EPERM', 'EBUSY', 'ENOENT']);
29
+ const DEFAULT_PAGE_SIZE = 100;
30
+ const SAFE_LABEL = /^[A-Za-z0-9][A-Za-z0-9_.:-]*$/;
31
+ const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;
32
+ function errno(error) {
33
+ return error?.code;
34
+ }
35
+ function isRecord(value) {
36
+ if (!value || typeof value !== 'object')
37
+ return false;
38
+ const prototype = Object.getPrototypeOf(value);
39
+ return prototype === Object.prototype || prototype === null;
40
+ }
41
+ function member(values, value) {
42
+ return values.some(item => item === value);
43
+ }
44
+ function label(value, max = 128) {
45
+ return typeof value === 'string' && value.length <= max && SAFE_LABEL.test(value);
46
+ }
47
+ function instant(value) {
48
+ if (typeof value !== 'string')
49
+ return false;
50
+ const time = Date.parse(value);
51
+ return Number.isFinite(time) && new Date(time).toISOString() === value;
52
+ }
53
+ function eventInput(value) {
54
+ if (!isRecord(value))
55
+ return undefined;
56
+ const input = { ...value };
57
+ if (Reflect.ownKeys(input).some(key => typeof key !== 'string' || !INPUT_KEYS.has(key)) ||
58
+ !member(KINDS, input.kind) || !member(SOURCES, input.source) || !member(TRANSPORTS, input.transport) ||
59
+ (input.projectId !== undefined && !label(input.projectId)) ||
60
+ (input.sessionId !== undefined && !label(input.sessionId)) ||
61
+ (input.agent !== undefined && !label(input.agent, 64)) ||
62
+ (input.outcome !== undefined && !member(OUTCOMES, input.outcome)))
63
+ return undefined;
64
+ const { kind, source, transport, phase, tool, correlationId, outcome, durationMs } = input;
65
+ if ((source === 'reported') !== (transport === 'host'))
66
+ return undefined;
67
+ if (kind === 'tool-start' || kind === 'tool-end') {
68
+ if (phase !== undefined || !label(tool, 64) || !label(correlationId))
69
+ return undefined;
70
+ if (kind === 'tool-start' && (outcome !== undefined || durationMs !== undefined))
71
+ return undefined;
72
+ if (kind === 'tool-end' && (outcome === undefined || typeof durationMs !== 'number' ||
73
+ !Number.isFinite(durationMs) || durationMs < 0 || durationMs > Number.MAX_SAFE_INTEGER))
74
+ return undefined;
75
+ }
76
+ else {
77
+ if (tool !== undefined || correlationId !== undefined || durationMs !== undefined ||
78
+ (kind !== 'session-end' && outcome !== undefined))
79
+ return undefined;
80
+ if (kind === 'phase' ? source !== 'reported' || !member(PHASES, phase) : phase !== undefined)
81
+ return undefined;
82
+ }
83
+ return input;
84
+ }
85
+ function emptySnapshot() {
86
+ return { schemaVersion: 1, journalId: null, revision: 0, nextSequence: 1, events: [] };
87
+ }
88
+ function parseSnapshot(raw) {
89
+ try {
90
+ const data = JSON.parse(raw);
91
+ if (isRecord(data) && Object.keys(data).every(key => SNAPSHOT_KEYS.has(key)) && data.schemaVersion === 1 &&
92
+ typeof data.journalId === 'string' && UUID.test(data.journalId) && typeof data.revision === 'number' &&
93
+ Number.isSafeInteger(data.revision) && data.revision >= 1 && data.revision < Number.MAX_SAFE_INTEGER &&
94
+ data.nextSequence === data.revision + 1 && Array.isArray(data.events) &&
95
+ data.events.length === Math.min(data.revision, ACTIVITY_JOURNAL_LIMITS.retained)) {
96
+ const first = data.revision - data.events.length + 1;
97
+ const ids = new Set();
98
+ const events = [];
99
+ for (const value of data.events) {
100
+ if (!isRecord(value))
101
+ break;
102
+ const { id, sequence, timestamp, ...input } = value;
103
+ const validated = eventInput(input);
104
+ if (typeof id !== 'string' || !UUID.test(id) || ids.has(id) || sequence !== first + events.length ||
105
+ !instant(timestamp) || !validated)
106
+ break;
107
+ ids.add(id);
108
+ events.push({ ...validated, id, sequence, timestamp });
109
+ }
110
+ if (events.length === data.events.length) {
111
+ return { schemaVersion: 1, journalId: data.journalId, revision: data.revision, nextSequence: data.nextSequence, events };
112
+ }
113
+ }
114
+ }
115
+ catch { /* Surface invalid storage without echoing its bytes. */ }
116
+ throw new ActivityJournalError('ACTIVITY_JOURNAL_INVALID_STORE', 'Activity journal is malformed or uses an unsupported schema.');
117
+ }
118
+ /** Local metadata journal shared by cooperating service processes. */
119
+ export class ActivityJournal {
120
+ constructor(options = {}) {
121
+ this.filePath = path.resolve(options.filePath ?? path.join(os.homedir(), '.shadow-brain', ACTIVITY_JOURNAL_FILENAME));
122
+ this.lockTimeoutMs = typeof options.lockTimeoutMs === 'number' && Number.isFinite(options.lockTimeoutMs)
123
+ ? Math.max(0, Math.min(60000, options.lockTimeoutMs))
124
+ : LOCK_TIMEOUT_MS;
125
+ }
126
+ get() {
127
+ let raw;
128
+ try {
129
+ const stat = fs.lstatSync(this.filePath, { throwIfNoEntry: false });
130
+ if (!stat)
131
+ return emptySnapshot();
132
+ this.checkFile(stat);
133
+ const fd = fs.openSync(this.filePath, fs.constants.O_RDONLY | (fs.constants.O_NOFOLLOW ?? 0));
134
+ try {
135
+ this.checkFile(fs.fstatSync(fd));
136
+ raw = fs.readFileSync(fd, 'utf8');
137
+ }
138
+ finally {
139
+ fs.closeSync(fd);
140
+ }
141
+ }
142
+ catch (error) {
143
+ if (error instanceof ActivityJournalError)
144
+ throw error;
145
+ throw new ActivityJournalError('ACTIVITY_JOURNAL_READ_FAILED', 'Could not read the activity journal.');
146
+ }
147
+ return parseSnapshot(raw);
148
+ }
149
+ read(options = {}) {
150
+ const { afterSequence, journalId, limit = DEFAULT_PAGE_SIZE, projectId } = options;
151
+ if ((afterSequence !== undefined && (!Number.isSafeInteger(afterSequence) || afterSequence < 0)) ||
152
+ (journalId !== undefined && (typeof journalId !== 'string' || !UUID.test(journalId))) ||
153
+ !Number.isSafeInteger(limit) || limit < 1 || limit > ACTIVITY_JOURNAL_LIMITS.page ||
154
+ (projectId !== undefined && !label(projectId))) {
155
+ throw new ActivityJournalError('ACTIVITY_JOURNAL_INVALID_CURSOR', 'Invalid activity journal cursor, project, or page size.');
156
+ }
157
+ const snapshot = this.get();
158
+ const oldestSequence = snapshot.events[0]?.sequence ?? null;
159
+ const latestSequence = snapshot.nextSequence - 1;
160
+ const reset = (journalId !== undefined && journalId !== snapshot.journalId) ||
161
+ (afterSequence !== undefined && afterSequence > latestSequence);
162
+ const gap = !reset && afterSequence !== undefined && oldestSequence !== null && afterSequence < oldestSequence - 1;
163
+ const eligible = projectId === undefined ? snapshot.events : snapshot.events.filter(event => event.projectId === projectId);
164
+ const newer = reset || afterSequence === undefined ? null : eligible.filter(event => event.sequence > afterSequence);
165
+ const events = newer ? newer.slice(0, limit) : eligible.slice(-limit);
166
+ const hasMore = !!newer && newer.length > events.length;
167
+ return {
168
+ journalId: snapshot.journalId,
169
+ revision: snapshot.revision,
170
+ oldestSequence,
171
+ latestSequence,
172
+ nextAfterSequence: hasMore ? events[events.length - 1].sequence : latestSequence,
173
+ hasMore,
174
+ gap,
175
+ reset,
176
+ retainedCount: snapshot.events.length,
177
+ droppedCount: latestSequence - snapshot.events.length,
178
+ events,
179
+ };
180
+ }
181
+ async append(raw) {
182
+ const input = eventInput(raw);
183
+ if (!input) {
184
+ throw new ActivityJournalError('ACTIVITY_JOURNAL_INVALID_EVENT', 'Invalid activity event. Use only defined metadata fields.');
185
+ }
186
+ try {
187
+ fs.mkdirSync(path.dirname(this.filePath), { recursive: true });
188
+ }
189
+ catch {
190
+ throw new ActivityJournalError('ACTIVITY_JOURNAL_WRITE_FAILED', 'Could not open the activity journal directory.');
191
+ }
192
+ const release = await this.acquireLock();
193
+ try {
194
+ const latest = this.get();
195
+ if (latest.nextSequence >= Number.MAX_SAFE_INTEGER) {
196
+ throw new ActivityJournalError('ACTIVITY_JOURNAL_INVALID_STORE', 'Activity journal sequence has reached its limit.');
197
+ }
198
+ const event = {
199
+ ...input, id: randomUUID(), sequence: latest.nextSequence, timestamp: new Date().toISOString(),
200
+ };
201
+ this.replace({
202
+ schemaVersion: 1,
203
+ journalId: latest.journalId ?? randomUUID(),
204
+ revision: latest.revision + 1,
205
+ nextSequence: event.sequence + 1,
206
+ events: [...latest.events, event].slice(-ACTIVITY_JOURNAL_LIMITS.retained),
207
+ });
208
+ return event;
209
+ }
210
+ finally {
211
+ release();
212
+ }
213
+ }
214
+ checkFile(stat) {
215
+ if (!stat.isFile() || stat.isSymbolicLink() || stat.nlink !== 1 || stat.size > ACTIVITY_JOURNAL_LIMITS.bytes) {
216
+ throw new ActivityJournalError('ACTIVITY_JOURNAL_INVALID_STORE', 'Activity journal must be a regular local file within its size limit.');
217
+ }
218
+ }
219
+ async acquireLock() {
220
+ const lock = this.filePath + '.lock';
221
+ const deadline = performance.now() + this.lockTimeoutMs;
222
+ let lastCode;
223
+ for (;;) {
224
+ let fd;
225
+ try {
226
+ fd = fs.openSync(lock, 'wx', 0o600);
227
+ }
228
+ catch (error) {
229
+ lastCode = errno(error);
230
+ if (!lastCode || !RETRYABLE_LOCK_OPEN.has(lastCode)) {
231
+ throw new ActivityJournalError('ACTIVITY_JOURNAL_LOCK_FAILED', 'Could not acquire the activity journal lock.');
232
+ }
233
+ const remaining = deadline - performance.now();
234
+ if (remaining <= 0)
235
+ break;
236
+ await delay(Math.min(remaining, LOCK_POLL_MS));
237
+ if (performance.now() >= deadline)
238
+ break;
239
+ continue;
240
+ }
241
+ let owner;
242
+ try {
243
+ owner = fs.fstatSync(fd, { bigint: true });
244
+ fs.writeFileSync(fd, JSON.stringify({ pid: process.pid, id: randomUUID(), acquiredAt: new Date().toISOString() }));
245
+ fs.closeSync(fd);
246
+ }
247
+ catch {
248
+ try {
249
+ fs.closeSync(fd);
250
+ }
251
+ catch { /* Preserve the original lock error. */ }
252
+ try {
253
+ if (owner)
254
+ this.releaseLock(lock, owner);
255
+ }
256
+ catch { /* Preserve an unfamiliar lock. */ }
257
+ throw new ActivityJournalError('ACTIVITY_JOURNAL_LOCK_FAILED', 'Could not initialize the activity journal lock.');
258
+ }
259
+ const owned = owner;
260
+ return () => this.releaseLock(lock, owned);
261
+ }
262
+ if (lastCode && lastCode !== 'EEXIST') {
263
+ throw new ActivityJournalError('ACTIVITY_JOURNAL_LOCK_FAILED', 'Could not acquire the activity journal lock (' + lastCode + ').');
264
+ }
265
+ throw new ActivityJournalError('ACTIVITY_JOURNAL_LOCK_TIMEOUT', 'Timed out waiting for the activity journal lock.');
266
+ }
267
+ releaseLock(lock, owner) {
268
+ try {
269
+ const current = fs.lstatSync(lock, { bigint: true, throwIfNoEntry: false });
270
+ if (current?.dev !== owner.dev || current.ino !== owner.ino)
271
+ throw new Error('Lock ownership changed.');
272
+ fs.unlinkSync(lock);
273
+ }
274
+ catch {
275
+ throw new ActivityJournalError('ACTIVITY_JOURNAL_LOCK_FAILED', 'Could not release the activity journal lock.');
276
+ }
277
+ }
278
+ replace(snapshot) {
279
+ const payload = JSON.stringify(snapshot) + '\n';
280
+ if (Buffer.byteLength(payload) > ACTIVITY_JOURNAL_LIMITS.bytes) {
281
+ throw new ActivityJournalError('ACTIVITY_JOURNAL_WRITE_FAILED', 'Activity journal exceeds its size limit.');
282
+ }
283
+ const temporary = this.filePath + '.' + randomUUID() + '.tmp';
284
+ let ownsTemp = false;
285
+ try {
286
+ const fd = fs.openSync(temporary, 'wx', 0o600);
287
+ ownsTemp = true;
288
+ try {
289
+ fs.writeFileSync(fd, payload);
290
+ fs.fsyncSync(fd);
291
+ }
292
+ finally {
293
+ fs.closeSync(fd);
294
+ }
295
+ fs.renameSync(temporary, this.filePath);
296
+ ownsTemp = false;
297
+ }
298
+ catch {
299
+ throw new ActivityJournalError('ACTIVITY_JOURNAL_WRITE_FAILED', 'Could not save activity journal.');
300
+ }
301
+ finally {
302
+ if (ownsTemp) {
303
+ try {
304
+ fs.unlinkSync(temporary);
305
+ }
306
+ catch { /* Preserve the original write error. */ }
307
+ }
308
+ }
309
+ }
310
+ }
311
+ export function activityJournalFor(brain) {
312
+ return new ActivityJournal({ filePath: path.join(path.dirname(brain.dbPath), ACTIVITY_JOURNAL_FILENAME) });
313
+ }
314
+ //# sourceMappingURL=activity-journal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-journal.js","sourceRoot":"","sources":["../../src/brain/activity-journal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { GlobalBrain } from './global-brain.js';
2
+ import type { FeatureSettingsStore } from './feature-settings.js';
3
+ import { type ActivityJournal } from './activity-journal.js';
4
+ /** Explicit host reports remain labelled reported; callers cannot forge measured events. */
5
+ export declare function reportAgentActivity(brain: Pick<GlobalBrain, 'dbPath'>, settings: FeatureSettingsStore, input: unknown, journal?: ActivityJournal): Promise<{
6
+ recorded: boolean;
7
+ reason: string;
8
+ event?: undefined;
9
+ } | {
10
+ recorded: boolean;
11
+ event: import("./activity-journal.js").ActivityJournalEvent;
12
+ reason?: undefined;
13
+ }>;
14
+ //# sourceMappingURL=activity-reporting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-reporting.d.ts","sourceRoot":"","sources":["../../src/brain/activity-reporting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEjF,4FAA4F;AAC5F,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe;;;;;;;;GAStJ"}
@@ -0,0 +1,17 @@
1
+ import { activityJournalFor } from './activity-journal.js';
2
+ /** Explicit host reports remain labelled reported; callers cannot forge measured events. */
3
+ export async function reportAgentActivity(brain, settings, input, journal) {
4
+ if (!input || typeof input !== 'object' || Array.isArray(input))
5
+ throw new TypeError('Send an activity object.');
6
+ const allowed = ['kind', 'projectId', 'sessionId', 'agent', 'phase', 'tool', 'correlationId', 'outcome', 'durationMs'];
7
+ if (Object.keys(input).some(key => !allowed.includes(key)))
8
+ throw new TypeError('Only activity labels, phases, and timing fields are accepted.');
9
+ const data = input;
10
+ if (['projectId', 'sessionId', 'agent'].some(key => typeof data[key] !== 'string' || !data[key]))
11
+ throw new TypeError('projectId, sessionId, and agent are required.');
12
+ if (!settings.get().features.activityRecording)
13
+ return { recorded: false, reason: 'Activity recording is disabled.' };
14
+ const event = await (journal ?? activityJournalFor(brain)).append({ ...data, source: 'reported', transport: 'host' });
15
+ return { recorded: true, event };
16
+ }
17
+ //# sourceMappingURL=activity-reporting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-reporting.js","sourceRoot":"","sources":["../../src/brain/activity-reporting.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAwB,MAAM,uBAAuB,CAAC;AAEjF,4FAA4F;AAC5F,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAkC,EAAE,QAA8B,EAAE,KAAc,EAAE,OAAyB;IACrJ,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC,CAAC;IACjH,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IACvH,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,+DAA+D,CAAC,CAAC;IACjJ,MAAM,IAAI,GAAG,KAAgC,CAAC;IAC9C,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;IACvK,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,iBAAiB;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC;IACtH,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IACtH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  // src/brain/auto-update.ts — Check for Shadow Brain updates
2
2
  import * as https from 'https';
3
- const CURRENT_VERSION = '7.0.0';
3
+ const CURRENT_VERSION = '7.1.3';
4
4
  const PACKAGE_NAME = '@theihtisham/agent-shadow-brain';
5
5
  export async function checkForUpdate() {
6
6
  return new Promise((resolve) => {
@@ -35,7 +35,7 @@ export class BrainPortability {
35
35
  const fileName = `brain-${projectName}-${timestamp}.json`;
36
36
  const filePath = path.join(this.exportDir, fileName);
37
37
  const data = {
38
- version: '6.0.3',
38
+ version: '7.1.3',
39
39
  exportedAt: new Date(),
40
40
  projectName,
41
41
  projectDir: this.projectDir,
@@ -0,0 +1,61 @@
1
+ import type { GlobalBrain } from './global-brain.js';
2
+ export declare const CLIENT_CAPABILITIES: readonly [{
3
+ readonly id: "codex";
4
+ readonly label: "Codex";
5
+ readonly target: "codex";
6
+ readonly docs: "https://developers.openai.com/codex/mcp/";
7
+ }, {
8
+ readonly id: "claude-code";
9
+ readonly label: "Claude Code";
10
+ readonly target: "claude-code";
11
+ readonly docs: "https://code.claude.com/docs/en/mcp";
12
+ }, {
13
+ readonly id: "opencode";
14
+ readonly label: "OpenCode";
15
+ readonly target: "opencode";
16
+ readonly docs: "https://opencode.ai/docs/mcp-servers/";
17
+ }, {
18
+ readonly id: "deepseek-harness";
19
+ readonly label: "DeepSeek Harness";
20
+ readonly target: "deepseek-harness";
21
+ readonly docs: "https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/mcp/mcp-client/README.md";
22
+ }, {
23
+ readonly id: "portable";
24
+ readonly label: "Other compatible clients";
25
+ readonly target: "portable";
26
+ readonly docs: "https://modelcontextprotocol.io/specification/2025-06-18/basic/transports";
27
+ }];
28
+ export declare function inspectClientIntegrations(options?: {
29
+ projectDir?: string;
30
+ brain?: GlobalBrain;
31
+ }): {
32
+ diagnostics: string;
33
+ checkedAt: string;
34
+ version: string;
35
+ checks: ({
36
+ id: string;
37
+ label: string;
38
+ status: string;
39
+ detail: string;
40
+ command?: undefined;
41
+ } | {
42
+ id: string;
43
+ label: string;
44
+ status: string;
45
+ detail: string;
46
+ command: string;
47
+ })[];
48
+ agents: {
49
+ note?: string | undefined;
50
+ id: "claude-code" | "opencode" | "deepseek-harness" | "codex" | "portable";
51
+ label: "Claude Code" | "OpenCode" | "Codex" | "DeepSeek Harness" | "Other compatible clients";
52
+ installation: string;
53
+ presentSkills: number;
54
+ totalSkills: number;
55
+ capabilities: string[];
56
+ detail: string;
57
+ command: string;
58
+ docs: "https://developers.openai.com/codex/mcp/" | "https://code.claude.com/docs/en/mcp" | "https://opencode.ai/docs/mcp-servers/" | "https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/mcp/mcp-client/README.md" | "https://modelcontextprotocol.io/specification/2025-06-18/basic/transports";
59
+ }[];
60
+ };
61
+ //# sourceMappingURL=client-integrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-integrations.d.ts","sourceRoot":"","sources":["../../src/brain/client-integrations.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;EAMrB,CAAC;AAqCZ,wBAAgB,yBAAyB,CAAC,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,WAAW,CAAA;CAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqCnG"}