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.
- package/.claude/skills/brainstorm/SKILL.md +340 -0
- package/.claude/skills/code-review-excellence/SKILL.md +198 -0
- package/.claude/skills/directive/SKILL.md +121 -0
- package/.claude/skills/directive/docs/pipeline/00-delegation-and-triage.md +181 -0
- package/.claude/skills/directive/docs/pipeline/01-checkpoint.md +34 -0
- package/.claude/skills/directive/docs/pipeline/02-read-directive.md +38 -0
- package/.claude/skills/directive/docs/pipeline/03-read-context.md +15 -0
- package/.claude/skills/directive/docs/pipeline/04-challenge.md +38 -0
- package/.claude/skills/directive/docs/pipeline/05-planning.md +64 -0
- package/.claude/skills/directive/docs/pipeline/06-technical-audit.md +88 -0
- package/.claude/skills/directive/docs/pipeline/07-plan-approval.md +145 -0
- package/.claude/skills/directive/docs/pipeline/07b-project-brainstorm.md +85 -0
- package/.claude/skills/directive/docs/pipeline/08-worktree-and-state.md +50 -0
- package/.claude/skills/directive/docs/pipeline/09-execute-projects.md +709 -0
- package/.claude/skills/directive/docs/pipeline/10-wrapup.md +242 -0
- package/.claude/skills/directive/docs/pipeline/11-completion-gate.md +75 -0
- package/.claude/skills/directive/docs/reference/rules/casting-rules.md +78 -0
- package/.claude/skills/directive/docs/reference/rules/failure-handling.md +20 -0
- package/.claude/skills/directive/docs/reference/rules/phase-definitions.md +42 -0
- package/.claude/skills/directive/docs/reference/rules/scope-and-dod.md +30 -0
- package/.claude/skills/directive/docs/reference/schemas/audit-output.md +44 -0
- package/.claude/skills/directive/docs/reference/schemas/brainstorm-output.md +52 -0
- package/.claude/skills/directive/docs/reference/schemas/challenger-output.md +13 -0
- package/.claude/skills/directive/docs/reference/schemas/checkpoint.md +18 -0
- package/.claude/skills/directive/docs/reference/schemas/current-json.md +5 -0
- package/.claude/skills/directive/docs/reference/schemas/directive-json.md +143 -0
- package/.claude/skills/directive/docs/reference/schemas/investigation-output.md +37 -0
- package/.claude/skills/directive/docs/reference/schemas/plan-schema.md +103 -0
- package/.claude/skills/directive/docs/reference/templates/architect-prompt.md +66 -0
- package/.claude/skills/directive/docs/reference/templates/auditor-prompt.md +53 -0
- package/.claude/skills/directive/docs/reference/templates/brainstorm-prompt.md +68 -0
- package/.claude/skills/directive/docs/reference/templates/challenger-prompt.md +35 -0
- package/.claude/skills/directive/docs/reference/templates/digest.md +134 -0
- package/.claude/skills/directive/docs/reference/templates/investigator-prompt.md +51 -0
- package/.claude/skills/directive/docs/reference/templates/planner-prompt.md +130 -0
- package/.claude/skills/frontend-design/SKILL.md +42 -0
- package/.claude/skills/gruai-agents/SKILL.md +161 -0
- package/.claude/skills/gruai-config/SKILL.md +61 -0
- package/.claude/skills/healthcheck/SKILL.md +216 -0
- package/.claude/skills/report/SKILL.md +380 -0
- package/.claude/skills/scout/SKILL.md +452 -0
- package/.claude/skills/seo-audit/SKILL.md +107 -0
- package/.claude/skills/walkthrough/SKILL.md +274 -0
- package/.claude/skills/webapp-testing/SKILL.md +96 -0
- package/LICENSE +21 -0
- package/README.md +206 -0
- package/cli/templates/CLAUDE.md.template +57 -0
- package/cli/templates/agent-roles/backend.md +47 -0
- package/cli/templates/agent-roles/cmo.md +52 -0
- package/cli/templates/agent-roles/content.md +48 -0
- package/cli/templates/agent-roles/coo.md +66 -0
- package/cli/templates/agent-roles/cpo.md +52 -0
- package/cli/templates/agent-roles/cto.md +63 -0
- package/cli/templates/agent-roles/data.md +46 -0
- package/cli/templates/agent-roles/design.md +46 -0
- package/cli/templates/agent-roles/frontend.md +47 -0
- package/cli/templates/agent-roles/fullstack.md +47 -0
- package/cli/templates/agent-roles/qa.md +46 -0
- package/cli/templates/backlog.json.template +3 -0
- package/cli/templates/directive.json.template +9 -0
- package/cli/templates/directive.md.template +23 -0
- package/cli/templates/goals-index.md +21 -0
- package/cli/templates/gruai.config.json.template +12 -0
- package/cli/templates/lessons.md +16 -0
- package/cli/templates/vision.md +35 -0
- package/cli/templates/welcome-directive/directive.json +9 -0
- package/cli/templates/welcome-directive/directive.md +53 -0
- package/dist/assets/GamePage-C5XQQOQH.js +49 -0
- package/dist/assets/README.md +17 -0
- package/dist/assets/characters/char_0.png +0 -0
- package/dist/assets/characters/char_1.png +0 -0
- package/dist/assets/characters/char_10.png +0 -0
- package/dist/assets/characters/char_11.png +0 -0
- package/dist/assets/characters/char_2.png +0 -0
- package/dist/assets/characters/char_3.png +0 -0
- package/dist/assets/characters/char_4.png +0 -0
- package/dist/assets/characters/char_5.png +0 -0
- package/dist/assets/characters/char_6.png +0 -0
- package/dist/assets/characters/char_7.png +0 -0
- package/dist/assets/characters/char_8.png +0 -0
- package/dist/assets/characters/char_9.png +0 -0
- package/dist/assets/index-CnTPDqpP.js +12 -0
- package/dist/assets/index-gR5q7ikB.css +1 -0
- package/dist/assets/office/furniture.png +0 -0
- package/dist/assets/office/room-builder.png +0 -0
- package/dist/index.html +16 -0
- package/dist-server/scripts/intelligence-trends.d.ts +100 -0
- package/dist-server/scripts/intelligence-trends.js +365 -0
- package/dist-server/server/actions/cleanup.d.ts +4 -0
- package/dist-server/server/actions/cleanup.js +30 -0
- package/dist-server/server/actions/send-input.d.ts +6 -0
- package/dist-server/server/actions/send-input.js +147 -0
- package/dist-server/server/actions/terminal.d.ts +4 -0
- package/dist-server/server/actions/terminal.js +427 -0
- package/dist-server/server/config.d.ts +9 -0
- package/dist-server/server/config.js +217 -0
- package/dist-server/server/db.d.ts +7 -0
- package/dist-server/server/db.js +79 -0
- package/dist-server/server/hooks/event-receiver.d.ts +11 -0
- package/dist-server/server/hooks/event-receiver.js +36 -0
- package/dist-server/server/index.d.ts +1 -0
- package/dist-server/server/index.js +552 -0
- package/dist-server/server/notifications/macos.d.ts +5 -0
- package/dist-server/server/notifications/macos.js +22 -0
- package/dist-server/server/notifications/notifier.d.ts +17 -0
- package/dist-server/server/notifications/notifier.js +110 -0
- package/dist-server/server/parsers/process-discovery.d.ts +39 -0
- package/dist-server/server/parsers/process-discovery.js +776 -0
- package/dist-server/server/parsers/session-scanner.d.ts +56 -0
- package/dist-server/server/parsers/session-scanner.js +390 -0
- package/dist-server/server/parsers/session-state.d.ts +68 -0
- package/dist-server/server/parsers/session-state.js +696 -0
- package/dist-server/server/parsers/session-state.test.d.ts +1 -0
- package/dist-server/server/parsers/session-state.test.js +950 -0
- package/dist-server/server/parsers/task-parser.d.ts +10 -0
- package/dist-server/server/parsers/task-parser.js +97 -0
- package/dist-server/server/parsers/team-parser.d.ts +3 -0
- package/dist-server/server/parsers/team-parser.js +67 -0
- package/dist-server/server/platform/__tests__/claude-code.test.d.ts +1 -0
- package/dist-server/server/platform/__tests__/claude-code.test.js +311 -0
- package/dist-server/server/platform/claude-code.d.ts +34 -0
- package/dist-server/server/platform/claude-code.js +94 -0
- package/dist-server/server/platform/index.d.ts +5 -0
- package/dist-server/server/platform/index.js +1 -0
- package/dist-server/server/platform/types.d.ts +190 -0
- package/dist-server/server/platform/types.js +9 -0
- package/dist-server/server/state/aggregator.d.ts +42 -0
- package/dist-server/server/state/aggregator.js +1080 -0
- package/dist-server/server/state/work-item-types.d.ts +555 -0
- package/dist-server/server/state/work-item-types.js +168 -0
- package/dist-server/server/types.d.ts +237 -0
- package/dist-server/server/types.js +1 -0
- package/dist-server/server/watchers/claude-watcher.d.ts +17 -0
- package/dist-server/server/watchers/claude-watcher.js +130 -0
- package/dist-server/server/watchers/context-watcher.d.ts +22 -0
- package/dist-server/server/watchers/context-watcher.js +125 -0
- package/dist-server/server/watchers/directive-watcher.d.ts +46 -0
- package/dist-server/server/watchers/directive-watcher.js +497 -0
- package/dist-server/server/watchers/session-watcher.d.ts +18 -0
- package/dist-server/server/watchers/session-watcher.js +126 -0
- package/dist-server/server/watchers/state-watcher.d.ts +36 -0
- package/dist-server/server/watchers/state-watcher.js +369 -0
- 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
|
+
}
|