@renseiai/agentfactory 0.8.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/LICENSE +21 -0
- package/README.md +125 -0
- package/dist/src/config/index.d.ts +3 -0
- package/dist/src/config/index.d.ts.map +1 -0
- package/dist/src/config/index.js +1 -0
- package/dist/src/config/repository-config.d.ts +44 -0
- package/dist/src/config/repository-config.d.ts.map +1 -0
- package/dist/src/config/repository-config.js +88 -0
- package/dist/src/config/repository-config.test.d.ts +2 -0
- package/dist/src/config/repository-config.test.d.ts.map +1 -0
- package/dist/src/config/repository-config.test.js +249 -0
- package/dist/src/deployment/deployment-checker.d.ts +110 -0
- package/dist/src/deployment/deployment-checker.d.ts.map +1 -0
- package/dist/src/deployment/deployment-checker.js +242 -0
- package/dist/src/deployment/index.d.ts +3 -0
- package/dist/src/deployment/index.d.ts.map +1 -0
- package/dist/src/deployment/index.js +2 -0
- package/dist/src/frontend/index.d.ts +2 -0
- package/dist/src/frontend/index.d.ts.map +1 -0
- package/dist/src/frontend/index.js +1 -0
- package/dist/src/frontend/types.d.ts +106 -0
- package/dist/src/frontend/types.d.ts.map +1 -0
- package/dist/src/frontend/types.js +11 -0
- package/dist/src/governor/decision-engine.d.ts +52 -0
- package/dist/src/governor/decision-engine.d.ts.map +1 -0
- package/dist/src/governor/decision-engine.js +220 -0
- package/dist/src/governor/decision-engine.test.d.ts +2 -0
- package/dist/src/governor/decision-engine.test.d.ts.map +1 -0
- package/dist/src/governor/decision-engine.test.js +629 -0
- package/dist/src/governor/event-bus.d.ts +43 -0
- package/dist/src/governor/event-bus.d.ts.map +1 -0
- package/dist/src/governor/event-bus.js +8 -0
- package/dist/src/governor/event-deduplicator.d.ts +43 -0
- package/dist/src/governor/event-deduplicator.d.ts.map +1 -0
- package/dist/src/governor/event-deduplicator.js +53 -0
- package/dist/src/governor/event-driven-governor.d.ts +131 -0
- package/dist/src/governor/event-driven-governor.d.ts.map +1 -0
- package/dist/src/governor/event-driven-governor.js +379 -0
- package/dist/src/governor/event-driven-governor.test.d.ts +2 -0
- package/dist/src/governor/event-driven-governor.test.d.ts.map +1 -0
- package/dist/src/governor/event-driven-governor.test.js +673 -0
- package/dist/src/governor/event-types.d.ts +78 -0
- package/dist/src/governor/event-types.d.ts.map +1 -0
- package/dist/src/governor/event-types.js +32 -0
- package/dist/src/governor/governor-types.d.ts +82 -0
- package/dist/src/governor/governor-types.d.ts.map +1 -0
- package/dist/src/governor/governor-types.js +21 -0
- package/dist/src/governor/governor.d.ts +100 -0
- package/dist/src/governor/governor.d.ts.map +1 -0
- package/dist/src/governor/governor.js +262 -0
- package/dist/src/governor/governor.test.d.ts +2 -0
- package/dist/src/governor/governor.test.d.ts.map +1 -0
- package/dist/src/governor/governor.test.js +514 -0
- package/dist/src/governor/human-touchpoints.d.ts +131 -0
- package/dist/src/governor/human-touchpoints.d.ts.map +1 -0
- package/dist/src/governor/human-touchpoints.js +251 -0
- package/dist/src/governor/human-touchpoints.test.d.ts +2 -0
- package/dist/src/governor/human-touchpoints.test.d.ts.map +1 -0
- package/dist/src/governor/human-touchpoints.test.js +366 -0
- package/dist/src/governor/in-memory-event-bus.d.ts +29 -0
- package/dist/src/governor/in-memory-event-bus.d.ts.map +1 -0
- package/dist/src/governor/in-memory-event-bus.js +79 -0
- package/dist/src/governor/index.d.ts +14 -0
- package/dist/src/governor/index.d.ts.map +1 -0
- package/dist/src/governor/index.js +13 -0
- package/dist/src/governor/override-parser.d.ts +60 -0
- package/dist/src/governor/override-parser.d.ts.map +1 -0
- package/dist/src/governor/override-parser.js +98 -0
- package/dist/src/governor/override-parser.test.d.ts +2 -0
- package/dist/src/governor/override-parser.test.d.ts.map +1 -0
- package/dist/src/governor/override-parser.test.js +312 -0
- package/dist/src/governor/platform-adapter.d.ts +69 -0
- package/dist/src/governor/platform-adapter.d.ts.map +1 -0
- package/dist/src/governor/platform-adapter.js +11 -0
- package/dist/src/governor/processing-state.d.ts +66 -0
- package/dist/src/governor/processing-state.d.ts.map +1 -0
- package/dist/src/governor/processing-state.js +43 -0
- package/dist/src/governor/processing-state.test.d.ts +2 -0
- package/dist/src/governor/processing-state.test.d.ts.map +1 -0
- package/dist/src/governor/processing-state.test.js +96 -0
- package/dist/src/governor/top-of-funnel.d.ts +118 -0
- package/dist/src/governor/top-of-funnel.d.ts.map +1 -0
- package/dist/src/governor/top-of-funnel.js +168 -0
- package/dist/src/governor/top-of-funnel.test.d.ts +2 -0
- package/dist/src/governor/top-of-funnel.test.d.ts.map +1 -0
- package/dist/src/governor/top-of-funnel.test.js +331 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +10 -0
- package/dist/src/linear-cli.d.ts +38 -0
- package/dist/src/linear-cli.d.ts.map +1 -0
- package/dist/src/linear-cli.js +674 -0
- package/dist/src/logger.d.ts +117 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +430 -0
- package/dist/src/manifest/generate.d.ts +20 -0
- package/dist/src/manifest/generate.d.ts.map +1 -0
- package/dist/src/manifest/generate.js +65 -0
- package/dist/src/manifest/index.d.ts +4 -0
- package/dist/src/manifest/index.d.ts.map +1 -0
- package/dist/src/manifest/index.js +2 -0
- package/dist/src/manifest/route-manifest.d.ts +34 -0
- package/dist/src/manifest/route-manifest.d.ts.map +1 -0
- package/dist/src/manifest/route-manifest.js +148 -0
- package/dist/src/orchestrator/activity-emitter.d.ts +119 -0
- package/dist/src/orchestrator/activity-emitter.d.ts.map +1 -0
- package/dist/src/orchestrator/activity-emitter.js +306 -0
- package/dist/src/orchestrator/api-activity-emitter.d.ts +167 -0
- package/dist/src/orchestrator/api-activity-emitter.d.ts.map +1 -0
- package/dist/src/orchestrator/api-activity-emitter.js +417 -0
- package/dist/src/orchestrator/heartbeat-writer.d.ts +57 -0
- package/dist/src/orchestrator/heartbeat-writer.d.ts.map +1 -0
- package/dist/src/orchestrator/heartbeat-writer.js +137 -0
- package/dist/src/orchestrator/index.d.ts +20 -0
- package/dist/src/orchestrator/index.d.ts.map +1 -0
- package/dist/src/orchestrator/index.js +22 -0
- package/dist/src/orchestrator/log-analyzer.d.ts +160 -0
- package/dist/src/orchestrator/log-analyzer.d.ts.map +1 -0
- package/dist/src/orchestrator/log-analyzer.js +572 -0
- package/dist/src/orchestrator/log-config.d.ts +39 -0
- package/dist/src/orchestrator/log-config.d.ts.map +1 -0
- package/dist/src/orchestrator/log-config.js +45 -0
- package/dist/src/orchestrator/orchestrator.d.ts +316 -0
- package/dist/src/orchestrator/orchestrator.d.ts.map +1 -0
- package/dist/src/orchestrator/orchestrator.js +3290 -0
- package/dist/src/orchestrator/parse-work-result.d.ts +16 -0
- package/dist/src/orchestrator/parse-work-result.d.ts.map +1 -0
- package/dist/src/orchestrator/parse-work-result.js +135 -0
- package/dist/src/orchestrator/parse-work-result.test.d.ts +2 -0
- package/dist/src/orchestrator/parse-work-result.test.d.ts.map +1 -0
- package/dist/src/orchestrator/parse-work-result.test.js +234 -0
- package/dist/src/orchestrator/progress-logger.d.ts +72 -0
- package/dist/src/orchestrator/progress-logger.d.ts.map +1 -0
- package/dist/src/orchestrator/progress-logger.js +135 -0
- package/dist/src/orchestrator/session-logger.d.ts +159 -0
- package/dist/src/orchestrator/session-logger.d.ts.map +1 -0
- package/dist/src/orchestrator/session-logger.js +275 -0
- package/dist/src/orchestrator/state-recovery.d.ts +96 -0
- package/dist/src/orchestrator/state-recovery.d.ts.map +1 -0
- package/dist/src/orchestrator/state-recovery.js +302 -0
- package/dist/src/orchestrator/state-types.d.ts +165 -0
- package/dist/src/orchestrator/state-types.d.ts.map +1 -0
- package/dist/src/orchestrator/state-types.js +7 -0
- package/dist/src/orchestrator/stream-parser.d.ts +151 -0
- package/dist/src/orchestrator/stream-parser.d.ts.map +1 -0
- package/dist/src/orchestrator/stream-parser.js +137 -0
- package/dist/src/orchestrator/types.d.ts +232 -0
- package/dist/src/orchestrator/types.d.ts.map +1 -0
- package/dist/src/orchestrator/types.js +4 -0
- package/dist/src/orchestrator/validate-git-remote.test.d.ts +2 -0
- package/dist/src/orchestrator/validate-git-remote.test.d.ts.map +1 -0
- package/dist/src/orchestrator/validate-git-remote.test.js +61 -0
- package/dist/src/providers/a2a-auth.d.ts +81 -0
- package/dist/src/providers/a2a-auth.d.ts.map +1 -0
- package/dist/src/providers/a2a-auth.js +188 -0
- package/dist/src/providers/a2a-auth.test.d.ts +2 -0
- package/dist/src/providers/a2a-auth.test.d.ts.map +1 -0
- package/dist/src/providers/a2a-auth.test.js +232 -0
- package/dist/src/providers/a2a-provider.d.ts +254 -0
- package/dist/src/providers/a2a-provider.d.ts.map +1 -0
- package/dist/src/providers/a2a-provider.integration.test.d.ts +9 -0
- package/dist/src/providers/a2a-provider.integration.test.d.ts.map +1 -0
- package/dist/src/providers/a2a-provider.integration.test.js +665 -0
- package/dist/src/providers/a2a-provider.js +811 -0
- package/dist/src/providers/a2a-provider.test.d.ts +2 -0
- package/dist/src/providers/a2a-provider.test.d.ts.map +1 -0
- package/dist/src/providers/a2a-provider.test.js +681 -0
- package/dist/src/providers/amp-provider.d.ts +20 -0
- package/dist/src/providers/amp-provider.d.ts.map +1 -0
- package/dist/src/providers/amp-provider.js +24 -0
- package/dist/src/providers/claude-provider.d.ts +18 -0
- package/dist/src/providers/claude-provider.d.ts.map +1 -0
- package/dist/src/providers/claude-provider.js +437 -0
- package/dist/src/providers/codex-provider.d.ts +133 -0
- package/dist/src/providers/codex-provider.d.ts.map +1 -0
- package/dist/src/providers/codex-provider.js +381 -0
- package/dist/src/providers/codex-provider.test.d.ts +2 -0
- package/dist/src/providers/codex-provider.test.d.ts.map +1 -0
- package/dist/src/providers/codex-provider.test.js +387 -0
- package/dist/src/providers/index.d.ts +44 -0
- package/dist/src/providers/index.d.ts.map +1 -0
- package/dist/src/providers/index.js +85 -0
- package/dist/src/providers/spring-ai-provider.d.ts +90 -0
- package/dist/src/providers/spring-ai-provider.d.ts.map +1 -0
- package/dist/src/providers/spring-ai-provider.integration.test.d.ts +13 -0
- package/dist/src/providers/spring-ai-provider.integration.test.d.ts.map +1 -0
- package/dist/src/providers/spring-ai-provider.integration.test.js +351 -0
- package/dist/src/providers/spring-ai-provider.js +317 -0
- package/dist/src/providers/spring-ai-provider.test.d.ts +2 -0
- package/dist/src/providers/spring-ai-provider.test.d.ts.map +1 -0
- package/dist/src/providers/spring-ai-provider.test.js +200 -0
- package/dist/src/providers/types.d.ts +165 -0
- package/dist/src/providers/types.d.ts.map +1 -0
- package/dist/src/providers/types.js +13 -0
- package/dist/src/templates/adapters.d.ts +51 -0
- package/dist/src/templates/adapters.d.ts.map +1 -0
- package/dist/src/templates/adapters.js +104 -0
- package/dist/src/templates/adapters.test.d.ts +2 -0
- package/dist/src/templates/adapters.test.d.ts.map +1 -0
- package/dist/src/templates/adapters.test.js +165 -0
- package/dist/src/templates/agent-definition.d.ts +85 -0
- package/dist/src/templates/agent-definition.d.ts.map +1 -0
- package/dist/src/templates/agent-definition.js +97 -0
- package/dist/src/templates/agent-definition.test.d.ts +2 -0
- package/dist/src/templates/agent-definition.test.d.ts.map +1 -0
- package/dist/src/templates/agent-definition.test.js +209 -0
- package/dist/src/templates/index.d.ts +14 -0
- package/dist/src/templates/index.d.ts.map +1 -0
- package/dist/src/templates/index.js +11 -0
- package/dist/src/templates/loader.d.ts +41 -0
- package/dist/src/templates/loader.d.ts.map +1 -0
- package/dist/src/templates/loader.js +114 -0
- package/dist/src/templates/registry.d.ts +80 -0
- package/dist/src/templates/registry.d.ts.map +1 -0
- package/dist/src/templates/registry.js +177 -0
- package/dist/src/templates/registry.test.d.ts +2 -0
- package/dist/src/templates/registry.test.d.ts.map +1 -0
- package/dist/src/templates/registry.test.js +198 -0
- package/dist/src/templates/renderer.d.ts +29 -0
- package/dist/src/templates/renderer.d.ts.map +1 -0
- package/dist/src/templates/renderer.js +35 -0
- package/dist/src/templates/strategy-templates.test.d.ts +2 -0
- package/dist/src/templates/strategy-templates.test.d.ts.map +1 -0
- package/dist/src/templates/strategy-templates.test.js +619 -0
- package/dist/src/templates/types.d.ts +233 -0
- package/dist/src/templates/types.d.ts.map +1 -0
- package/dist/src/templates/types.js +127 -0
- package/dist/src/templates/types.test.d.ts +2 -0
- package/dist/src/templates/types.test.d.ts.map +1 -0
- package/dist/src/templates/types.test.js +232 -0
- package/dist/src/tools/index.d.ts +6 -0
- package/dist/src/tools/index.d.ts.map +1 -0
- package/dist/src/tools/index.js +3 -0
- package/dist/src/tools/linear-runner.d.ts +34 -0
- package/dist/src/tools/linear-runner.d.ts.map +1 -0
- package/dist/src/tools/linear-runner.js +700 -0
- package/dist/src/tools/plugins/linear.d.ts +9 -0
- package/dist/src/tools/plugins/linear.d.ts.map +1 -0
- package/dist/src/tools/plugins/linear.js +138 -0
- package/dist/src/tools/registry.d.ts +9 -0
- package/dist/src/tools/registry.d.ts.map +1 -0
- package/dist/src/tools/registry.js +18 -0
- package/dist/src/tools/types.d.ts +18 -0
- package/dist/src/tools/types.d.ts.map +1 -0
- package/dist/src/tools/types.js +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger utility for worker and orchestrator output
|
|
3
|
+
*
|
|
4
|
+
* Provides colorized, structured logging with worker/agent context.
|
|
5
|
+
* Uses ANSI escape codes directly to avoid external dependencies.
|
|
6
|
+
*/
|
|
7
|
+
declare const colors: {
|
|
8
|
+
readonly reset: "\u001B[0m";
|
|
9
|
+
readonly bold: "\u001B[1m";
|
|
10
|
+
readonly dim: "\u001B[2m";
|
|
11
|
+
readonly black: "\u001B[30m";
|
|
12
|
+
readonly red: "\u001B[31m";
|
|
13
|
+
readonly green: "\u001B[32m";
|
|
14
|
+
readonly yellow: "\u001B[33m";
|
|
15
|
+
readonly blue: "\u001B[34m";
|
|
16
|
+
readonly magenta: "\u001B[35m";
|
|
17
|
+
readonly cyan: "\u001B[36m";
|
|
18
|
+
readonly white: "\u001B[37m";
|
|
19
|
+
readonly brightBlack: "\u001B[90m";
|
|
20
|
+
readonly brightRed: "\u001B[91m";
|
|
21
|
+
readonly brightGreen: "\u001B[92m";
|
|
22
|
+
readonly brightYellow: "\u001B[93m";
|
|
23
|
+
readonly brightBlue: "\u001B[94m";
|
|
24
|
+
readonly brightMagenta: "\u001B[95m";
|
|
25
|
+
readonly brightCyan: "\u001B[96m";
|
|
26
|
+
readonly brightWhite: "\u001B[97m";
|
|
27
|
+
readonly bgBlack: "\u001B[40m";
|
|
28
|
+
readonly bgRed: "\u001B[41m";
|
|
29
|
+
readonly bgGreen: "\u001B[42m";
|
|
30
|
+
readonly bgYellow: "\u001B[43m";
|
|
31
|
+
readonly bgBlue: "\u001B[44m";
|
|
32
|
+
readonly bgMagenta: "\u001B[45m";
|
|
33
|
+
readonly bgCyan: "\u001B[46m";
|
|
34
|
+
readonly bgWhite: "\u001B[47m";
|
|
35
|
+
};
|
|
36
|
+
type ColorName = keyof typeof colors;
|
|
37
|
+
declare const LEVEL_STYLES: Record<string, {
|
|
38
|
+
color: ColorName;
|
|
39
|
+
label: string;
|
|
40
|
+
}>;
|
|
41
|
+
export type LogLevel = keyof typeof LEVEL_STYLES;
|
|
42
|
+
export interface LoggerContext {
|
|
43
|
+
workerId?: string;
|
|
44
|
+
workerShortId?: string;
|
|
45
|
+
issueIdentifier?: string;
|
|
46
|
+
sessionId?: string;
|
|
47
|
+
}
|
|
48
|
+
export interface LoggerOptions {
|
|
49
|
+
showTimestamp?: boolean;
|
|
50
|
+
showLevel?: boolean;
|
|
51
|
+
colorEnabled?: boolean;
|
|
52
|
+
minLevel?: LogLevel;
|
|
53
|
+
}
|
|
54
|
+
export declare class Logger {
|
|
55
|
+
private context;
|
|
56
|
+
private options;
|
|
57
|
+
constructor(context?: LoggerContext, options?: LoggerOptions);
|
|
58
|
+
/**
|
|
59
|
+
* Create a child logger with additional context
|
|
60
|
+
*/
|
|
61
|
+
child(additionalContext: LoggerContext): Logger;
|
|
62
|
+
/**
|
|
63
|
+
* Format the context prefix (worker ID, issue identifier)
|
|
64
|
+
*/
|
|
65
|
+
private formatPrefix;
|
|
66
|
+
/**
|
|
67
|
+
* Format a log line
|
|
68
|
+
*/
|
|
69
|
+
private formatLine;
|
|
70
|
+
/**
|
|
71
|
+
* Format data object for display
|
|
72
|
+
*/
|
|
73
|
+
private formatData;
|
|
74
|
+
/**
|
|
75
|
+
* Check if a log level should be output
|
|
76
|
+
*/
|
|
77
|
+
private shouldLog;
|
|
78
|
+
/**
|
|
79
|
+
* Core log method
|
|
80
|
+
*/
|
|
81
|
+
private log;
|
|
82
|
+
debug(message: string, data?: Record<string, unknown>): void;
|
|
83
|
+
info(message: string, data?: Record<string, unknown>): void;
|
|
84
|
+
success(message: string, data?: Record<string, unknown>): void;
|
|
85
|
+
warn(message: string, data?: Record<string, unknown>): void;
|
|
86
|
+
error(message: string, data?: Record<string, unknown>): void;
|
|
87
|
+
/**
|
|
88
|
+
* Log an activity (thought, action, response) with appropriate styling
|
|
89
|
+
*/
|
|
90
|
+
activity(type: string, content: string, maxLength?: number): void;
|
|
91
|
+
/**
|
|
92
|
+
* Log a section header/divider
|
|
93
|
+
*/
|
|
94
|
+
section(title: string): void;
|
|
95
|
+
/**
|
|
96
|
+
* Log a status change with visual indicator
|
|
97
|
+
*/
|
|
98
|
+
status(status: string, details?: string): void;
|
|
99
|
+
/**
|
|
100
|
+
* Log a tool call with formatted input
|
|
101
|
+
*/
|
|
102
|
+
toolCall(toolName: string, input?: Record<string, unknown>): void;
|
|
103
|
+
/**
|
|
104
|
+
* Format tool input for display (show relevant params based on tool type)
|
|
105
|
+
*/
|
|
106
|
+
private formatToolInput;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Create a logger instance
|
|
110
|
+
*/
|
|
111
|
+
export declare function createLogger(context?: LoggerContext, options?: LoggerOptions): Logger;
|
|
112
|
+
/**
|
|
113
|
+
* Default logger for quick use
|
|
114
|
+
*/
|
|
115
|
+
export declare const logger: Logger;
|
|
116
|
+
export {};
|
|
117
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCF,CAAA;AAEV,KAAK,SAAS,GAAG,MAAM,OAAO,MAAM,CAAA;AAepC,QAAA,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAMrE,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,YAAY,CAAA;AAEhD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB;AAwCD,qBAAa,MAAM;IACjB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,OAAO,CAAyB;gBAE5B,OAAO,GAAE,aAAkB,EAAE,OAAO,GAAE,aAAkB;IAUpE;;OAEG;IACH,KAAK,CAAC,iBAAiB,EAAE,aAAa,GAAG,MAAM;IAO/C;;OAEG;IACH,OAAO,CAAC,YAAY;IA2BpB;;OAEG;IACH,OAAO,CAAC,UAAU;IA6ClB;;OAEG;IACH,OAAO,CAAC,UAAU;IAiBlB;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,GAAG;IAcX,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI9D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,SAAK,GAAG,IAAI;IAqC7D;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAa5B;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAoD9C;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAkDjE;;OAEG;IACH,OAAO,CAAC,eAAe;CA0BxB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAErF;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,QAAiB,CAAA"}
|
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger utility for worker and orchestrator output
|
|
3
|
+
*
|
|
4
|
+
* Provides colorized, structured logging with worker/agent context.
|
|
5
|
+
* Uses ANSI escape codes directly to avoid external dependencies.
|
|
6
|
+
*/
|
|
7
|
+
// ANSI color codes
|
|
8
|
+
const colors = {
|
|
9
|
+
reset: '\x1b[0m',
|
|
10
|
+
bold: '\x1b[1m',
|
|
11
|
+
dim: '\x1b[2m',
|
|
12
|
+
// Foreground colors
|
|
13
|
+
black: '\x1b[30m',
|
|
14
|
+
red: '\x1b[31m',
|
|
15
|
+
green: '\x1b[32m',
|
|
16
|
+
yellow: '\x1b[33m',
|
|
17
|
+
blue: '\x1b[34m',
|
|
18
|
+
magenta: '\x1b[35m',
|
|
19
|
+
cyan: '\x1b[36m',
|
|
20
|
+
white: '\x1b[37m',
|
|
21
|
+
// Bright foreground colors
|
|
22
|
+
brightBlack: '\x1b[90m',
|
|
23
|
+
brightRed: '\x1b[91m',
|
|
24
|
+
brightGreen: '\x1b[92m',
|
|
25
|
+
brightYellow: '\x1b[93m',
|
|
26
|
+
brightBlue: '\x1b[94m',
|
|
27
|
+
brightMagenta: '\x1b[95m',
|
|
28
|
+
brightCyan: '\x1b[96m',
|
|
29
|
+
brightWhite: '\x1b[97m',
|
|
30
|
+
// Background colors
|
|
31
|
+
bgBlack: '\x1b[40m',
|
|
32
|
+
bgRed: '\x1b[41m',
|
|
33
|
+
bgGreen: '\x1b[42m',
|
|
34
|
+
bgYellow: '\x1b[43m',
|
|
35
|
+
bgBlue: '\x1b[44m',
|
|
36
|
+
bgMagenta: '\x1b[45m',
|
|
37
|
+
bgCyan: '\x1b[46m',
|
|
38
|
+
bgWhite: '\x1b[47m',
|
|
39
|
+
};
|
|
40
|
+
// Color palette for worker/agent identification (easy to distinguish)
|
|
41
|
+
const WORKER_COLORS = ['cyan', 'magenta', 'yellow', 'green', 'blue', 'brightCyan', 'brightMagenta', 'brightYellow'];
|
|
42
|
+
// Activity type colors
|
|
43
|
+
const ACTIVITY_COLORS = {
|
|
44
|
+
thought: 'brightBlack',
|
|
45
|
+
action: 'blue',
|
|
46
|
+
response: 'green',
|
|
47
|
+
tool_use: 'cyan',
|
|
48
|
+
tool_result: 'brightBlack',
|
|
49
|
+
};
|
|
50
|
+
// Log level styling
|
|
51
|
+
const LEVEL_STYLES = {
|
|
52
|
+
debug: { color: 'brightBlack', label: 'DBG' },
|
|
53
|
+
info: { color: 'brightBlue', label: 'INF' },
|
|
54
|
+
success: { color: 'green', label: 'OK ' },
|
|
55
|
+
warn: { color: 'yellow', label: 'WRN' },
|
|
56
|
+
error: { color: 'red', label: 'ERR' },
|
|
57
|
+
};
|
|
58
|
+
const LOG_LEVEL_PRIORITY = {
|
|
59
|
+
debug: 0,
|
|
60
|
+
info: 1,
|
|
61
|
+
success: 2,
|
|
62
|
+
warn: 3,
|
|
63
|
+
error: 4,
|
|
64
|
+
};
|
|
65
|
+
// Map to track assigned colors for worker/agent IDs
|
|
66
|
+
const colorAssignments = new Map();
|
|
67
|
+
let colorIndex = 0;
|
|
68
|
+
function getColorForId(id) {
|
|
69
|
+
if (!colorAssignments.has(id)) {
|
|
70
|
+
colorAssignments.set(id, WORKER_COLORS[colorIndex % WORKER_COLORS.length]);
|
|
71
|
+
colorIndex++;
|
|
72
|
+
}
|
|
73
|
+
return colorAssignments.get(id);
|
|
74
|
+
}
|
|
75
|
+
function colorize(text, ...colorNames) {
|
|
76
|
+
const colorCodes = colorNames.map((c) => colors[c]).join('');
|
|
77
|
+
return `${colorCodes}${text}${colors.reset}`;
|
|
78
|
+
}
|
|
79
|
+
function formatTimestamp() {
|
|
80
|
+
const now = new Date();
|
|
81
|
+
const hours = now.getHours().toString().padStart(2, '0');
|
|
82
|
+
const minutes = now.getMinutes().toString().padStart(2, '0');
|
|
83
|
+
const seconds = now.getSeconds().toString().padStart(2, '0');
|
|
84
|
+
return `${hours}:${minutes}:${seconds}`;
|
|
85
|
+
}
|
|
86
|
+
function truncate(text, maxLength) {
|
|
87
|
+
if (text.length <= maxLength)
|
|
88
|
+
return text;
|
|
89
|
+
return text.substring(0, maxLength - 3) + '...';
|
|
90
|
+
}
|
|
91
|
+
export class Logger {
|
|
92
|
+
context;
|
|
93
|
+
options;
|
|
94
|
+
constructor(context = {}, options = {}) {
|
|
95
|
+
this.context = context;
|
|
96
|
+
this.options = {
|
|
97
|
+
showTimestamp: options.showTimestamp ?? true,
|
|
98
|
+
showLevel: options.showLevel ?? true,
|
|
99
|
+
colorEnabled: options.colorEnabled ?? process.stdout.isTTY !== false,
|
|
100
|
+
minLevel: options.minLevel ?? 'info',
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Create a child logger with additional context
|
|
105
|
+
*/
|
|
106
|
+
child(additionalContext) {
|
|
107
|
+
return new Logger({ ...this.context, ...additionalContext }, this.options);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Format the context prefix (worker ID, issue identifier)
|
|
111
|
+
*/
|
|
112
|
+
formatPrefix() {
|
|
113
|
+
const parts = [];
|
|
114
|
+
// Worker ID with color
|
|
115
|
+
if (this.context.workerShortId || this.context.workerId) {
|
|
116
|
+
const id = this.context.workerShortId || this.context.workerId.substring(0, 8);
|
|
117
|
+
const color = getColorForId(this.context.workerId || id);
|
|
118
|
+
if (this.options.colorEnabled) {
|
|
119
|
+
parts.push(colorize(`[${id}]`, color, 'bold'));
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
parts.push(`[${id}]`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// Issue identifier with rotating color for visual distinction
|
|
126
|
+
if (this.context.issueIdentifier) {
|
|
127
|
+
if (this.options.colorEnabled) {
|
|
128
|
+
const color = getColorForId(this.context.issueIdentifier);
|
|
129
|
+
parts.push(colorize(`[${this.context.issueIdentifier}]`, color, 'bold'));
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
parts.push(`[${this.context.issueIdentifier}]`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return parts.join(' ');
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Format a log line
|
|
139
|
+
*/
|
|
140
|
+
formatLine(level, message, data) {
|
|
141
|
+
const parts = [];
|
|
142
|
+
// Timestamp
|
|
143
|
+
if (this.options.showTimestamp) {
|
|
144
|
+
const ts = formatTimestamp();
|
|
145
|
+
if (this.options.colorEnabled) {
|
|
146
|
+
parts.push(colorize(ts, 'dim'));
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
parts.push(ts);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// Level indicator
|
|
153
|
+
if (this.options.showLevel) {
|
|
154
|
+
const style = LEVEL_STYLES[level];
|
|
155
|
+
if (this.options.colorEnabled) {
|
|
156
|
+
parts.push(colorize(style.label, style.color));
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
parts.push(style.label);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Context prefix (worker/issue)
|
|
163
|
+
const prefix = this.formatPrefix();
|
|
164
|
+
if (prefix) {
|
|
165
|
+
parts.push(prefix);
|
|
166
|
+
}
|
|
167
|
+
// Message
|
|
168
|
+
parts.push(message);
|
|
169
|
+
// Data (if any)
|
|
170
|
+
if (data && Object.keys(data).length > 0) {
|
|
171
|
+
const dataStr = this.formatData(data);
|
|
172
|
+
if (this.options.colorEnabled) {
|
|
173
|
+
parts.push(colorize(dataStr, 'dim'));
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
parts.push(dataStr);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return parts.join(' ');
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Format data object for display
|
|
183
|
+
*/
|
|
184
|
+
formatData(data) {
|
|
185
|
+
const pairs = [];
|
|
186
|
+
for (const [key, value] of Object.entries(data)) {
|
|
187
|
+
if (value === undefined)
|
|
188
|
+
continue;
|
|
189
|
+
let valueStr;
|
|
190
|
+
if (typeof value === 'string') {
|
|
191
|
+
valueStr = truncate(value, 50);
|
|
192
|
+
}
|
|
193
|
+
else if (typeof value === 'number' || typeof value === 'boolean') {
|
|
194
|
+
valueStr = String(value);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
valueStr = truncate(JSON.stringify(value), 50);
|
|
198
|
+
}
|
|
199
|
+
pairs.push(`${key}=${valueStr}`);
|
|
200
|
+
}
|
|
201
|
+
return pairs.length > 0 ? `{ ${pairs.join(', ')} }` : '';
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Check if a log level should be output
|
|
205
|
+
*/
|
|
206
|
+
shouldLog(level) {
|
|
207
|
+
return LOG_LEVEL_PRIORITY[level] >= LOG_LEVEL_PRIORITY[this.options.minLevel];
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Core log method
|
|
211
|
+
*/
|
|
212
|
+
log(level, message, data) {
|
|
213
|
+
if (!this.shouldLog(level))
|
|
214
|
+
return;
|
|
215
|
+
const line = this.formatLine(level, message, data);
|
|
216
|
+
if (level === 'error') {
|
|
217
|
+
console.error(line);
|
|
218
|
+
}
|
|
219
|
+
else if (level === 'warn') {
|
|
220
|
+
console.warn(line);
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
console.log(line);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// Convenience methods
|
|
227
|
+
debug(message, data) {
|
|
228
|
+
this.log('debug', message, data);
|
|
229
|
+
}
|
|
230
|
+
info(message, data) {
|
|
231
|
+
this.log('info', message, data);
|
|
232
|
+
}
|
|
233
|
+
success(message, data) {
|
|
234
|
+
this.log('success', message, data);
|
|
235
|
+
}
|
|
236
|
+
warn(message, data) {
|
|
237
|
+
this.log('warn', message, data);
|
|
238
|
+
}
|
|
239
|
+
error(message, data) {
|
|
240
|
+
this.log('error', message, data);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Log an activity (thought, action, response) with appropriate styling
|
|
244
|
+
*/
|
|
245
|
+
activity(type, content, maxLength = 80) {
|
|
246
|
+
if (!this.shouldLog('info'))
|
|
247
|
+
return;
|
|
248
|
+
const parts = [];
|
|
249
|
+
// Timestamp
|
|
250
|
+
if (this.options.showTimestamp) {
|
|
251
|
+
const ts = formatTimestamp();
|
|
252
|
+
if (this.options.colorEnabled) {
|
|
253
|
+
parts.push(colorize(ts, 'dim'));
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
parts.push(ts);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
// Activity type indicator
|
|
260
|
+
const activityColor = ACTIVITY_COLORS[type] || 'white';
|
|
261
|
+
const typeLabel = type.substring(0, 3).toUpperCase();
|
|
262
|
+
if (this.options.colorEnabled) {
|
|
263
|
+
parts.push(colorize(typeLabel, activityColor));
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
parts.push(typeLabel);
|
|
267
|
+
}
|
|
268
|
+
// Context prefix
|
|
269
|
+
const prefix = this.formatPrefix();
|
|
270
|
+
if (prefix) {
|
|
271
|
+
parts.push(prefix);
|
|
272
|
+
}
|
|
273
|
+
// Content (truncated)
|
|
274
|
+
const truncatedContent = truncate(content.replace(/\n/g, ' '), maxLength);
|
|
275
|
+
parts.push(truncatedContent);
|
|
276
|
+
console.log(parts.join(' '));
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Log a section header/divider
|
|
280
|
+
*/
|
|
281
|
+
section(title) {
|
|
282
|
+
const divider = '─'.repeat(60);
|
|
283
|
+
if (this.options.colorEnabled) {
|
|
284
|
+
console.log(colorize(`\n${divider}`, 'dim'));
|
|
285
|
+
console.log(colorize(` ${title}`, 'bold', 'brightWhite'));
|
|
286
|
+
console.log(colorize(`${divider}`, 'dim'));
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
console.log(`\n${divider}`);
|
|
290
|
+
console.log(` ${title}`);
|
|
291
|
+
console.log(divider);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Log a status change with visual indicator
|
|
296
|
+
*/
|
|
297
|
+
status(status, details) {
|
|
298
|
+
const statusColors = {
|
|
299
|
+
starting: 'yellow',
|
|
300
|
+
running: 'blue',
|
|
301
|
+
completed: 'green',
|
|
302
|
+
stopped: 'yellow',
|
|
303
|
+
failed: 'red',
|
|
304
|
+
claimed: 'cyan',
|
|
305
|
+
registered: 'green',
|
|
306
|
+
};
|
|
307
|
+
const color = statusColors[status.toLowerCase()] || 'white';
|
|
308
|
+
const parts = [];
|
|
309
|
+
// Timestamp
|
|
310
|
+
if (this.options.showTimestamp) {
|
|
311
|
+
const ts = formatTimestamp();
|
|
312
|
+
if (this.options.colorEnabled) {
|
|
313
|
+
parts.push(colorize(ts, 'dim'));
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
parts.push(ts);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
// Status indicator
|
|
320
|
+
if (this.options.colorEnabled) {
|
|
321
|
+
parts.push(colorize('●', color));
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
parts.push('*');
|
|
325
|
+
}
|
|
326
|
+
// Context prefix
|
|
327
|
+
const prefix = this.formatPrefix();
|
|
328
|
+
if (prefix) {
|
|
329
|
+
parts.push(prefix);
|
|
330
|
+
}
|
|
331
|
+
// Status text
|
|
332
|
+
if (this.options.colorEnabled) {
|
|
333
|
+
parts.push(colorize(status.toUpperCase(), color, 'bold'));
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
parts.push(status.toUpperCase());
|
|
337
|
+
}
|
|
338
|
+
// Details
|
|
339
|
+
if (details) {
|
|
340
|
+
parts.push(details);
|
|
341
|
+
}
|
|
342
|
+
console.log(parts.join(' '));
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Log a tool call with formatted input
|
|
346
|
+
*/
|
|
347
|
+
toolCall(toolName, input) {
|
|
348
|
+
if (!this.shouldLog('info'))
|
|
349
|
+
return;
|
|
350
|
+
const parts = [];
|
|
351
|
+
// Timestamp
|
|
352
|
+
if (this.options.showTimestamp) {
|
|
353
|
+
const ts = formatTimestamp();
|
|
354
|
+
if (this.options.colorEnabled) {
|
|
355
|
+
parts.push(colorize(ts, 'dim'));
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
parts.push(ts);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
// Tool indicator
|
|
362
|
+
if (this.options.colorEnabled) {
|
|
363
|
+
parts.push(colorize('→', 'cyan'));
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
parts.push('→');
|
|
367
|
+
}
|
|
368
|
+
// Context prefix
|
|
369
|
+
const prefix = this.formatPrefix();
|
|
370
|
+
if (prefix) {
|
|
371
|
+
parts.push(prefix);
|
|
372
|
+
}
|
|
373
|
+
// Tool name
|
|
374
|
+
if (this.options.colorEnabled) {
|
|
375
|
+
parts.push(colorize(toolName, 'cyan', 'bold'));
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
parts.push(toolName);
|
|
379
|
+
}
|
|
380
|
+
// Formatted input (key parameters)
|
|
381
|
+
if (input) {
|
|
382
|
+
const summary = this.formatToolInput(toolName, input);
|
|
383
|
+
if (summary) {
|
|
384
|
+
if (this.options.colorEnabled) {
|
|
385
|
+
parts.push(colorize(summary, 'dim'));
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
388
|
+
parts.push(summary);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
console.log(parts.join(' '));
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Format tool input for display (show relevant params based on tool type)
|
|
396
|
+
*/
|
|
397
|
+
formatToolInput(toolName, input) {
|
|
398
|
+
// Show most relevant parameter based on tool type
|
|
399
|
+
const toolParams = {
|
|
400
|
+
Read: ['file_path'],
|
|
401
|
+
Write: ['file_path'],
|
|
402
|
+
Edit: ['file_path', 'old_string'],
|
|
403
|
+
Grep: ['pattern', 'path'],
|
|
404
|
+
Glob: ['pattern'],
|
|
405
|
+
Bash: ['command'],
|
|
406
|
+
Task: ['subagent_type', 'description'],
|
|
407
|
+
WebFetch: ['url'],
|
|
408
|
+
WebSearch: ['query'],
|
|
409
|
+
};
|
|
410
|
+
const relevantParams = toolParams[toolName] || Object.keys(input).slice(0, 2);
|
|
411
|
+
const values = [];
|
|
412
|
+
for (const param of relevantParams) {
|
|
413
|
+
if (input[param] !== undefined) {
|
|
414
|
+
const value = String(input[param]);
|
|
415
|
+
values.push(truncate(value, 40));
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
return values.length > 0 ? values.join(' ') : '';
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Create a logger instance
|
|
423
|
+
*/
|
|
424
|
+
export function createLogger(context, options) {
|
|
425
|
+
return new Logger(context, options);
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Default logger for quick use
|
|
429
|
+
*/
|
|
430
|
+
export const logger = createLogger();
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content generators for route and page files.
|
|
3
|
+
*
|
|
4
|
+
* Produces output identical to the create-app templates so that
|
|
5
|
+
* af-sync-routes can fill in missing files without drift.
|
|
6
|
+
*/
|
|
7
|
+
import type { RouteEntry, PageEntry } from './route-manifest.js';
|
|
8
|
+
/**
|
|
9
|
+
* Generate the content for a route.ts re-export file.
|
|
10
|
+
*
|
|
11
|
+
* Output matches the `routeReexport()` helper in create-app templates.
|
|
12
|
+
*/
|
|
13
|
+
export declare function generateRouteContent(entry: RouteEntry): string;
|
|
14
|
+
/**
|
|
15
|
+
* Generate the content for a dashboard page.tsx file.
|
|
16
|
+
*
|
|
17
|
+
* Output matches the dashboard page helpers in create-app templates.
|
|
18
|
+
*/
|
|
19
|
+
export declare function generatePageContent(entry: PageEntry): string;
|
|
20
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/manifest/generate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEhE;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAO9D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CA2C5D"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content generators for route and page files.
|
|
3
|
+
*
|
|
4
|
+
* Produces output identical to the create-app templates so that
|
|
5
|
+
* af-sync-routes can fill in missing files without drift.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Generate the content for a route.ts re-export file.
|
|
9
|
+
*
|
|
10
|
+
* Output matches the `routeReexport()` helper in create-app templates.
|
|
11
|
+
*/
|
|
12
|
+
export function generateRouteContent(entry) {
|
|
13
|
+
const lines = [`import { routes } from '@/lib/config'`];
|
|
14
|
+
// Maintain consistent ordering: POST, GET, DELETE
|
|
15
|
+
if (entry.methods.POST)
|
|
16
|
+
lines.push(`export const POST = ${entry.methods.POST}`);
|
|
17
|
+
if (entry.methods.GET)
|
|
18
|
+
lines.push(`export const GET = ${entry.methods.GET}`);
|
|
19
|
+
if (entry.methods.DELETE)
|
|
20
|
+
lines.push(`export const DELETE = ${entry.methods.DELETE}`);
|
|
21
|
+
return lines.join('\n') + '\n';
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Generate the content for a dashboard page.tsx file.
|
|
25
|
+
*
|
|
26
|
+
* Output matches the dashboard page helpers in create-app templates.
|
|
27
|
+
*/
|
|
28
|
+
export function generatePageContent(entry) {
|
|
29
|
+
const hasParams = entry.params && entry.params.length > 0;
|
|
30
|
+
// Build import statement
|
|
31
|
+
const importName = entry.importAlias ?? entry.component;
|
|
32
|
+
const imports = [`import { DashboardShell, ${importName} } from '@renseiai/agentfactory-dashboard'`];
|
|
33
|
+
imports.push(`import { usePathname${hasParams ? ', useParams' : ''} } from 'next/navigation'`);
|
|
34
|
+
// Build component body
|
|
35
|
+
const bodyLines = [];
|
|
36
|
+
bodyLines.push(` const pathname = usePathname()`);
|
|
37
|
+
if (hasParams) {
|
|
38
|
+
const paramType = entry.params.map((p) => `${p}: string`).join('; ');
|
|
39
|
+
bodyLines.push(` const params = useParams<{ ${paramType} }>()`);
|
|
40
|
+
}
|
|
41
|
+
// Build the inner component JSX
|
|
42
|
+
const componentName = entry.importAlias
|
|
43
|
+
? entry.importAlias.split(' as ')[1].trim()
|
|
44
|
+
: entry.component;
|
|
45
|
+
let propsStr = '';
|
|
46
|
+
if (hasParams && entry.propMapping) {
|
|
47
|
+
const props = Object.entries(entry.propMapping)
|
|
48
|
+
.map(([param, prop]) => `${prop}={params.${param}}`)
|
|
49
|
+
.join(' ');
|
|
50
|
+
propsStr = ` ${props}`;
|
|
51
|
+
}
|
|
52
|
+
return `'use client'
|
|
53
|
+
|
|
54
|
+
${imports.join('\n')}
|
|
55
|
+
|
|
56
|
+
export default function ${entry.exportName}() {
|
|
57
|
+
${bodyLines.join('\n')}
|
|
58
|
+
return (
|
|
59
|
+
<DashboardShell currentPath={pathname}>
|
|
60
|
+
<${componentName}${propsStr} />
|
|
61
|
+
</DashboardShell>
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
`;
|
|
65
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/manifest/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC3F,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route Manifest — Single source of truth for all AgentFactory route and page files.
|
|
3
|
+
*
|
|
4
|
+
* Used by `af-sync-routes` to generate missing route files in consumer projects,
|
|
5
|
+
* and by parity tests to verify create-app templates stay aligned.
|
|
6
|
+
*/
|
|
7
|
+
export type HttpMethod = 'GET' | 'POST' | 'DELETE';
|
|
8
|
+
export interface RouteEntry {
|
|
9
|
+
/** Relative file path, e.g. "src/app/api/workers/register/route.ts" */
|
|
10
|
+
path: string;
|
|
11
|
+
/** Map of HTTP method → routes accessor, e.g. { POST: 'routes.workers.register.POST' } */
|
|
12
|
+
methods: Partial<Record<HttpMethod, string>>;
|
|
13
|
+
}
|
|
14
|
+
export interface PageEntry {
|
|
15
|
+
/** Relative file path, e.g. "src/app/pipeline/page.tsx" */
|
|
16
|
+
path: string;
|
|
17
|
+
/** Dashboard component name, e.g. "PipelinePage" */
|
|
18
|
+
component: string;
|
|
19
|
+
/** Default export function name, e.g. "Pipeline" */
|
|
20
|
+
exportName: string;
|
|
21
|
+
/** Import alias if different from component, e.g. "DashboardPage as FleetPage" */
|
|
22
|
+
importAlias?: string;
|
|
23
|
+
/** Dynamic route params, e.g. ["id"] for [id] segments */
|
|
24
|
+
params?: string[];
|
|
25
|
+
/** Map of param name → component prop name, e.g. { id: "sessionId" } */
|
|
26
|
+
propMapping?: Record<string, string>;
|
|
27
|
+
}
|
|
28
|
+
export interface RouteManifest {
|
|
29
|
+
version: number;
|
|
30
|
+
routes: RouteEntry[];
|
|
31
|
+
pages: PageEntry[];
|
|
32
|
+
}
|
|
33
|
+
export declare const ROUTE_MANIFEST: RouteManifest;
|
|
34
|
+
//# sourceMappingURL=route-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-manifest.d.ts","sourceRoot":"","sources":["../../../src/manifest/route-manifest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;AAElD,MAAM,WAAW,UAAU;IACzB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAA;IACZ,0FAA0F;IAC1F,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAA;CAC7C;AAED,MAAM,WAAW,SAAS;IACxB,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAA;IACZ,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAA;IACjB,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAA;IAClB,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,UAAU,EAAE,CAAA;IACpB,KAAK,EAAE,SAAS,EAAE,CAAA;CACnB;AAED,eAAO,MAAM,cAAc,EAAE,aAmJ5B,CAAA"}
|