processSessionStartHooks function
Future<List<HookResultMessage> >
processSessionStartHooks(
- String source, {
- SessionStartHooksOptions? options,
Process session start hooks.
Implementation
Future<List<HookResultMessage>> processSessionStartHooks(
String source, {
SessionStartHooksOptions? options,
}) async {
if (_isBareMode()) return [];
final opts = options ?? SessionStartHooksOptions();
final hookMessages = <HookResultMessage>[];
final additionalContexts = <String>[];
final allWatchPaths = <String>[];
// Load plugin hooks.
if (_loadPluginHooks != null) {
try {
await _loadPluginHooks!();
} catch (e) {
// Log error but don't crash.
}
}
// Execute session start hooks.
if (_executeSessionStartHooks != null) {
await for (final hookResult in _executeSessionStartHooks!(source, opts)) {
if (hookResult.content != null) {
hookMessages.add(hookResult);
}
if (hookResult.additionalContexts != null &&
hookResult.additionalContexts!.isNotEmpty) {
additionalContexts.addAll(hookResult.additionalContexts!);
}
if (hookResult.initialUserMessage != null) {
_pendingInitialUserMessage = hookResult.initialUserMessage;
}
if (hookResult.watchPaths != null && hookResult.watchPaths!.isNotEmpty) {
allWatchPaths.addAll(hookResult.watchPaths!);
}
}
}
// If hooks provided additional context, add it as a message.
if (additionalContexts.isNotEmpty) {
hookMessages.add(
HookResultMessage(
content: additionalContexts.join('\n'),
hookName: 'SessionStart',
toolUseId: 'SessionStart',
hookEvent: 'SessionStart',
),
);
}
return hookMessages;
}