gru-ai 0.1.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 (143) hide show
  1. package/.claude/skills/brainstorm/SKILL.md +340 -0
  2. package/.claude/skills/code-review-excellence/SKILL.md +198 -0
  3. package/.claude/skills/directive/SKILL.md +121 -0
  4. package/.claude/skills/directive/docs/pipeline/00-delegation-and-triage.md +181 -0
  5. package/.claude/skills/directive/docs/pipeline/01-checkpoint.md +34 -0
  6. package/.claude/skills/directive/docs/pipeline/02-read-directive.md +38 -0
  7. package/.claude/skills/directive/docs/pipeline/03-read-context.md +15 -0
  8. package/.claude/skills/directive/docs/pipeline/04-challenge.md +38 -0
  9. package/.claude/skills/directive/docs/pipeline/05-planning.md +64 -0
  10. package/.claude/skills/directive/docs/pipeline/06-technical-audit.md +88 -0
  11. package/.claude/skills/directive/docs/pipeline/07-plan-approval.md +145 -0
  12. package/.claude/skills/directive/docs/pipeline/07b-project-brainstorm.md +85 -0
  13. package/.claude/skills/directive/docs/pipeline/08-worktree-and-state.md +50 -0
  14. package/.claude/skills/directive/docs/pipeline/09-execute-projects.md +709 -0
  15. package/.claude/skills/directive/docs/pipeline/10-wrapup.md +242 -0
  16. package/.claude/skills/directive/docs/pipeline/11-completion-gate.md +75 -0
  17. package/.claude/skills/directive/docs/reference/rules/casting-rules.md +78 -0
  18. package/.claude/skills/directive/docs/reference/rules/failure-handling.md +20 -0
  19. package/.claude/skills/directive/docs/reference/rules/phase-definitions.md +42 -0
  20. package/.claude/skills/directive/docs/reference/rules/scope-and-dod.md +30 -0
  21. package/.claude/skills/directive/docs/reference/schemas/audit-output.md +44 -0
  22. package/.claude/skills/directive/docs/reference/schemas/brainstorm-output.md +52 -0
  23. package/.claude/skills/directive/docs/reference/schemas/challenger-output.md +13 -0
  24. package/.claude/skills/directive/docs/reference/schemas/checkpoint.md +18 -0
  25. package/.claude/skills/directive/docs/reference/schemas/current-json.md +5 -0
  26. package/.claude/skills/directive/docs/reference/schemas/directive-json.md +143 -0
  27. package/.claude/skills/directive/docs/reference/schemas/investigation-output.md +37 -0
  28. package/.claude/skills/directive/docs/reference/schemas/plan-schema.md +103 -0
  29. package/.claude/skills/directive/docs/reference/templates/architect-prompt.md +66 -0
  30. package/.claude/skills/directive/docs/reference/templates/auditor-prompt.md +53 -0
  31. package/.claude/skills/directive/docs/reference/templates/brainstorm-prompt.md +68 -0
  32. package/.claude/skills/directive/docs/reference/templates/challenger-prompt.md +35 -0
  33. package/.claude/skills/directive/docs/reference/templates/digest.md +134 -0
  34. package/.claude/skills/directive/docs/reference/templates/investigator-prompt.md +51 -0
  35. package/.claude/skills/directive/docs/reference/templates/planner-prompt.md +130 -0
  36. package/.claude/skills/frontend-design/SKILL.md +42 -0
  37. package/.claude/skills/gruai-agents/SKILL.md +161 -0
  38. package/.claude/skills/gruai-config/SKILL.md +61 -0
  39. package/.claude/skills/healthcheck/SKILL.md +216 -0
  40. package/.claude/skills/report/SKILL.md +380 -0
  41. package/.claude/skills/scout/SKILL.md +452 -0
  42. package/.claude/skills/seo-audit/SKILL.md +107 -0
  43. package/.claude/skills/walkthrough/SKILL.md +274 -0
  44. package/.claude/skills/webapp-testing/SKILL.md +96 -0
  45. package/LICENSE +21 -0
  46. package/README.md +206 -0
  47. package/cli/templates/CLAUDE.md.template +57 -0
  48. package/cli/templates/agent-roles/backend.md +47 -0
  49. package/cli/templates/agent-roles/cmo.md +52 -0
  50. package/cli/templates/agent-roles/content.md +48 -0
  51. package/cli/templates/agent-roles/coo.md +66 -0
  52. package/cli/templates/agent-roles/cpo.md +52 -0
  53. package/cli/templates/agent-roles/cto.md +63 -0
  54. package/cli/templates/agent-roles/data.md +46 -0
  55. package/cli/templates/agent-roles/design.md +46 -0
  56. package/cli/templates/agent-roles/frontend.md +47 -0
  57. package/cli/templates/agent-roles/fullstack.md +47 -0
  58. package/cli/templates/agent-roles/qa.md +46 -0
  59. package/cli/templates/backlog.json.template +3 -0
  60. package/cli/templates/directive.json.template +9 -0
  61. package/cli/templates/directive.md.template +23 -0
  62. package/cli/templates/goals-index.md +21 -0
  63. package/cli/templates/gruai.config.json.template +12 -0
  64. package/cli/templates/lessons.md +16 -0
  65. package/cli/templates/vision.md +35 -0
  66. package/cli/templates/welcome-directive/directive.json +9 -0
  67. package/cli/templates/welcome-directive/directive.md +53 -0
  68. package/dist/assets/GamePage-C5XQQOQH.js +49 -0
  69. package/dist/assets/README.md +17 -0
  70. package/dist/assets/characters/char_0.png +0 -0
  71. package/dist/assets/characters/char_1.png +0 -0
  72. package/dist/assets/characters/char_10.png +0 -0
  73. package/dist/assets/characters/char_11.png +0 -0
  74. package/dist/assets/characters/char_2.png +0 -0
  75. package/dist/assets/characters/char_3.png +0 -0
  76. package/dist/assets/characters/char_4.png +0 -0
  77. package/dist/assets/characters/char_5.png +0 -0
  78. package/dist/assets/characters/char_6.png +0 -0
  79. package/dist/assets/characters/char_7.png +0 -0
  80. package/dist/assets/characters/char_8.png +0 -0
  81. package/dist/assets/characters/char_9.png +0 -0
  82. package/dist/assets/index-CnTPDqpP.js +12 -0
  83. package/dist/assets/index-gR5q7ikB.css +1 -0
  84. package/dist/assets/office/furniture.png +0 -0
  85. package/dist/assets/office/room-builder.png +0 -0
  86. package/dist/index.html +16 -0
  87. package/dist-server/scripts/intelligence-trends.d.ts +100 -0
  88. package/dist-server/scripts/intelligence-trends.js +365 -0
  89. package/dist-server/server/actions/cleanup.d.ts +4 -0
  90. package/dist-server/server/actions/cleanup.js +30 -0
  91. package/dist-server/server/actions/send-input.d.ts +6 -0
  92. package/dist-server/server/actions/send-input.js +147 -0
  93. package/dist-server/server/actions/terminal.d.ts +4 -0
  94. package/dist-server/server/actions/terminal.js +427 -0
  95. package/dist-server/server/config.d.ts +9 -0
  96. package/dist-server/server/config.js +217 -0
  97. package/dist-server/server/db.d.ts +7 -0
  98. package/dist-server/server/db.js +79 -0
  99. package/dist-server/server/hooks/event-receiver.d.ts +11 -0
  100. package/dist-server/server/hooks/event-receiver.js +36 -0
  101. package/dist-server/server/index.d.ts +1 -0
  102. package/dist-server/server/index.js +552 -0
  103. package/dist-server/server/notifications/macos.d.ts +5 -0
  104. package/dist-server/server/notifications/macos.js +22 -0
  105. package/dist-server/server/notifications/notifier.d.ts +17 -0
  106. package/dist-server/server/notifications/notifier.js +110 -0
  107. package/dist-server/server/parsers/process-discovery.d.ts +39 -0
  108. package/dist-server/server/parsers/process-discovery.js +776 -0
  109. package/dist-server/server/parsers/session-scanner.d.ts +56 -0
  110. package/dist-server/server/parsers/session-scanner.js +390 -0
  111. package/dist-server/server/parsers/session-state.d.ts +68 -0
  112. package/dist-server/server/parsers/session-state.js +696 -0
  113. package/dist-server/server/parsers/session-state.test.d.ts +1 -0
  114. package/dist-server/server/parsers/session-state.test.js +950 -0
  115. package/dist-server/server/parsers/task-parser.d.ts +10 -0
  116. package/dist-server/server/parsers/task-parser.js +97 -0
  117. package/dist-server/server/parsers/team-parser.d.ts +3 -0
  118. package/dist-server/server/parsers/team-parser.js +67 -0
  119. package/dist-server/server/platform/__tests__/claude-code.test.d.ts +1 -0
  120. package/dist-server/server/platform/__tests__/claude-code.test.js +311 -0
  121. package/dist-server/server/platform/claude-code.d.ts +34 -0
  122. package/dist-server/server/platform/claude-code.js +94 -0
  123. package/dist-server/server/platform/index.d.ts +5 -0
  124. package/dist-server/server/platform/index.js +1 -0
  125. package/dist-server/server/platform/types.d.ts +190 -0
  126. package/dist-server/server/platform/types.js +9 -0
  127. package/dist-server/server/state/aggregator.d.ts +42 -0
  128. package/dist-server/server/state/aggregator.js +1080 -0
  129. package/dist-server/server/state/work-item-types.d.ts +555 -0
  130. package/dist-server/server/state/work-item-types.js +168 -0
  131. package/dist-server/server/types.d.ts +237 -0
  132. package/dist-server/server/types.js +1 -0
  133. package/dist-server/server/watchers/claude-watcher.d.ts +17 -0
  134. package/dist-server/server/watchers/claude-watcher.js +130 -0
  135. package/dist-server/server/watchers/context-watcher.d.ts +22 -0
  136. package/dist-server/server/watchers/context-watcher.js +125 -0
  137. package/dist-server/server/watchers/directive-watcher.d.ts +46 -0
  138. package/dist-server/server/watchers/directive-watcher.js +497 -0
  139. package/dist-server/server/watchers/session-watcher.d.ts +18 -0
  140. package/dist-server/server/watchers/session-watcher.js +126 -0
  141. package/dist-server/server/watchers/state-watcher.d.ts +36 -0
  142. package/dist-server/server/watchers/state-watcher.js +369 -0
  143. package/package.json +68 -0
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Platform adapter interface for multi-platform session monitoring.
3
+ *
4
+ * This module defines the contract between platform-specific implementations
5
+ * (Claude Code, Codex CLI, Cline/Roo, Aider, etc.) and the rest of the
6
+ * Agent Conductor system. All platform-specific logic lives behind this
7
+ * interface; consumers interact only with these generic types.
8
+ */
9
+ import type { SessionActivity, ProjectConfig, ConductorConfig } from '../types.js';
10
+ import type { SessionFileState, DiscoveredFile } from '../parsers/session-state.js';
11
+ /**
12
+ * Minimal interface describing the aggregator methods that watchers need.
13
+ * Using an interface here instead of importing the concrete Aggregator class
14
+ * avoids circular dependencies between platform/ and state/.
15
+ */
16
+ export interface AggregatorHandle {
17
+ /** Refresh the full session list from discovered files. */
18
+ refreshSessions(): void;
19
+ /** Update a single session from its parsed file state. */
20
+ updateSessionFromFileState(filePath: string, state: SessionFileState): void;
21
+ /** Refresh team data (metadata watcher callback). */
22
+ refreshTeams(): void;
23
+ /** Refresh tasks for a specific team (metadata watcher callback). */
24
+ refreshTasks(teamName: string): void;
25
+ }
26
+ /**
27
+ * Platform-agnostic agent activity state.
28
+ *
29
+ * - `working` -- the agent is actively processing (tool calls, generation)
30
+ * - `needs_input` -- the agent is blocked waiting for user/human input
31
+ * - `done` -- the agent's turn is complete (idle, finished)
32
+ * - `unknown` -- state cannot be determined (e.g. proprietary platform)
33
+ */
34
+ export type AgentState = 'working' | 'needs_input' | 'done' | 'unknown';
35
+ /**
36
+ * Feature flags describing what a platform supports. Consumers can check
37
+ * these at runtime to degrade gracefully for less-capable platforms.
38
+ */
39
+ export interface PlatformCapabilities {
40
+ /** Platform exposes file-based session logs that can be watched with chokidar. */
41
+ supportsFileWatching: boolean;
42
+ /** Session files are append-only (JSONL), enabling incremental byte-offset reads. */
43
+ supportsIncrementalReads: boolean;
44
+ /** Agent sessions can be spawned programmatically via CLI. */
45
+ supportsCLISpawn: boolean;
46
+ /** Platform has MCP client support. */
47
+ supportsMCP: boolean;
48
+ /** Platform tracks subagent/sub-task relationships. */
49
+ supportsSubagents: boolean;
50
+ /** Platform exposes token usage or cost data. */
51
+ supportsTokenTracking: boolean;
52
+ }
53
+ /**
54
+ * Interface for a session file watcher. Implementations watch for changes
55
+ * to session log files and push updates through the aggregator.
56
+ */
57
+ export interface SessionWatcher {
58
+ /** Begin watching for session file changes. */
59
+ start(): void;
60
+ /** Stop watching and release all resources (timers, file handles). */
61
+ stop(): Promise<void>;
62
+ /** True once the watcher has completed its initial scan and is actively monitoring. */
63
+ readonly ready: boolean;
64
+ }
65
+ /**
66
+ * Interface for a metadata watcher. Watches platform-specific metadata
67
+ * sources (e.g. teams, tasks) that live outside session log files.
68
+ * Not all platforms have separate metadata -- those return null from
69
+ * `createMetadataWatcher()`.
70
+ */
71
+ export interface MetadataWatcher {
72
+ /** Begin watching for metadata changes. */
73
+ start(): void;
74
+ /** Stop watching and release all resources. */
75
+ stop(): Promise<void>;
76
+ /** True once the watcher has completed its initial scan. */
77
+ readonly ready: boolean;
78
+ }
79
+ /**
80
+ * The platform adapter interface. Each supported coding-agent platform
81
+ * (Claude Code, Codex CLI, Cline/Roo, Aider, etc.) provides an
82
+ * implementation of this interface.
83
+ *
84
+ * Method contracts are platform-generic: no assumptions about JSONL,
85
+ * specific directory layouts, or Claude-Code-specific concepts leak
86
+ * through the interface boundary.
87
+ */
88
+ export interface PlatformAdapter {
89
+ /**
90
+ * Discover all session files/records managed by this platform.
91
+ *
92
+ * Returns a map keyed by a unique file path (or record identifier) to
93
+ * metadata about each discovered session. Platforms without file-based
94
+ * sessions (e.g. Cursor) may return an empty map.
95
+ *
96
+ * @param projectFilter - Optional project identifier to scope discovery
97
+ * to a single project. When omitted, all projects are scanned.
98
+ */
99
+ discoverSessionFiles(projectFilter?: string): Map<string, DiscoveredFile>;
100
+ /**
101
+ * Bootstrap in-memory state for all discovered sessions. Called once at
102
+ * server startup. Recent sessions get a full parse; older sessions get
103
+ * lightweight stubs that are fully parsed on-demand.
104
+ *
105
+ * @param projectFilter - Optional project scope (same semantics as
106
+ * `discoverSessionFiles`).
107
+ * @returns The discovered files map (same shape as `discoverSessionFiles`).
108
+ */
109
+ initializeAllFileStates(projectFilter?: string): Map<string, DiscoveredFile>;
110
+ /**
111
+ * Process an incremental update for a single session file/record.
112
+ *
113
+ * For append-only formats (JSONL), this reads new bytes from the last
114
+ * known offset. For full-file formats (JSON), this re-parses the file.
115
+ * Returns the updated state, or null if there is nothing new.
116
+ *
117
+ * @param filePath - The session file path or record identifier.
118
+ */
119
+ processFileUpdate(filePath: string): SessionFileState | null;
120
+ /**
121
+ * Get existing in-memory state for a session, or cold-start bootstrap
122
+ * it from disk if not yet loaded.
123
+ *
124
+ * @param filePath - The session file path or record identifier.
125
+ * @returns The session state, or null if the file cannot be read.
126
+ */
127
+ getOrBootstrap(filePath: string): SessionFileState | null;
128
+ /**
129
+ * Remove in-memory state for a session (e.g. when the file is deleted).
130
+ *
131
+ * @param filePath - The session file path or record identifier.
132
+ */
133
+ removeFileState(filePath: string): void;
134
+ /**
135
+ * Return all in-memory session states. Used by the aggregator to build
136
+ * the full dashboard snapshot.
137
+ */
138
+ getAllFileStates(): Map<string, SessionFileState>;
139
+ /**
140
+ * Convert a platform-specific `SessionFileState` into the
141
+ * platform-agnostic `SessionActivity` used by the dashboard.
142
+ *
143
+ * Returns null if the state lacks sufficient data (e.g. no session ID).
144
+ *
145
+ * @param state - The parsed session file state.
146
+ */
147
+ toSessionActivity(state: SessionFileState): SessionActivity | null;
148
+ /**
149
+ * Derive a platform-agnostic agent state from a parsed session state.
150
+ *
151
+ * This replaces the Claude-Code-specific `machineStateToLastEntryType`
152
+ * with a generic enum that works across all platforms.
153
+ *
154
+ * @param state - The parsed session file state.
155
+ */
156
+ getAgentState(state: SessionFileState): AgentState;
157
+ /**
158
+ * Create a watcher that monitors session files/records for changes and
159
+ * pushes updates through the aggregator.
160
+ *
161
+ * @param aggregator - Handle to the aggregator for pushing updates.
162
+ * @param projectFilter - Optional project scope for the watcher.
163
+ */
164
+ createSessionWatcher(aggregator: AggregatorHandle, projectFilter?: string): SessionWatcher;
165
+ /**
166
+ * Create a watcher for platform metadata that lives outside session
167
+ * files (e.g. Claude Code's teams/tasks JSON, Codex's session index).
168
+ *
169
+ * Returns null for platforms that do not have a separate metadata source
170
+ * (the session watcher covers everything).
171
+ *
172
+ * @param aggregator - Handle to the aggregator for pushing updates.
173
+ */
174
+ createMetadataWatcher(aggregator: AggregatorHandle): MetadataWatcher | null;
175
+ /**
176
+ * Discover projects managed by this platform. Each platform has its own
177
+ * concept of "projects" (directory-based, workspace-based, etc.).
178
+ */
179
+ discoverProjects(): ProjectConfig[];
180
+ /**
181
+ * Load the conductor configuration, merging platform-specific discovery
182
+ * with any user-defined config.
183
+ */
184
+ loadConfig(): ConductorConfig;
185
+ /**
186
+ * Return feature flags describing what this platform supports.
187
+ * Consumers use these to degrade gracefully for less-capable platforms.
188
+ */
189
+ getPlatformCapabilities(): PlatformCapabilities;
190
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Platform adapter interface for multi-platform session monitoring.
3
+ *
4
+ * This module defines the contract between platform-specific implementations
5
+ * (Claude Code, Codex CLI, Cline/Roo, Aider, etc.) and the rest of the
6
+ * Agent Conductor system. All platform-specific logic lives behind this
7
+ * interface; consumers interact only with these generic types.
8
+ */
9
+ export {};
@@ -0,0 +1,42 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import { type SessionFileState } from '../parsers/session-state.js';
3
+ import type { PlatformAdapter } from '../platform/types.js';
4
+ import type { ConductorConfig, DashboardState, DirectiveState, Session, HookEvent } from '../types.js';
5
+ import type { FullWorkState, WorkItemFilter, WorkItem } from './work-item-types.js';
6
+ export declare class Aggregator extends EventEmitter {
7
+ private state;
8
+ private config;
9
+ private staleTimer;
10
+ private discoveryTimer;
11
+ private paneMapping;
12
+ private discoveredFiles;
13
+ private workState;
14
+ readonly projectFilter: string;
15
+ private adapter;
16
+ constructor(config: ConductorConfig, adapter?: PlatformAdapter);
17
+ getState(): DashboardState;
18
+ getActiveSessions(): Session[];
19
+ initialize(): void;
20
+ refreshTeams(): void;
21
+ refreshTasks(teamName?: string): void;
22
+ refreshAll(): void;
23
+ updateDirectiveState(directiveState: DirectiveState | null, directiveHistory?: DirectiveState[], activeDirectives?: DirectiveState[]): void;
24
+ updateWorkState(workState: FullWorkState): void;
25
+ getWorkState(): FullWorkState;
26
+ getWorkItems(filters?: WorkItemFilter): WorkItem[];
27
+ refreshSessions(): void;
28
+ private rederiveSessionStatuses;
29
+ updateSessionFromFileState(filePath: string, fileState: SessionFileState): void;
30
+ addEvent(event: HookEvent): void;
31
+ refreshProcessDiscovery(): void;
32
+ private applyPaneMappings;
33
+ detectStaleness(): void;
34
+ destroy(): void;
35
+ private buildSessionsFromFileStates;
36
+ private buildSessionActivities;
37
+ private getLatestEventInfo;
38
+ private updateSessionFromEvent;
39
+ private statusFromEventType;
40
+ private getLivePaneIds;
41
+ private emitChange;
42
+ }