refactor(hooks): split session-notification.ts to comply with 200 LOC module rule
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -0,0 +1,51 @@
|
|||||||
|
type EventProperties = Record<string, unknown> | undefined
|
||||||
|
|
||||||
|
function isRecord(value: unknown): value is Record<string, unknown> {
|
||||||
|
return typeof value === "object" && value !== null
|
||||||
|
}
|
||||||
|
|
||||||
|
function getEventInfo(properties: EventProperties): Record<string, unknown> | undefined {
|
||||||
|
const info = properties?.info
|
||||||
|
return isRecord(info) ? info : undefined
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getSessionID(properties: EventProperties): string | undefined {
|
||||||
|
const sessionID = properties?.sessionID
|
||||||
|
if (typeof sessionID === "string" && sessionID.length > 0) return sessionID
|
||||||
|
|
||||||
|
const sessionId = properties?.sessionId
|
||||||
|
if (typeof sessionId === "string" && sessionId.length > 0) return sessionId
|
||||||
|
|
||||||
|
const info = getEventInfo(properties)
|
||||||
|
const infoSessionID = info?.sessionID
|
||||||
|
if (typeof infoSessionID === "string" && infoSessionID.length > 0) return infoSessionID
|
||||||
|
|
||||||
|
const infoSessionId = info?.sessionId
|
||||||
|
if (typeof infoSessionId === "string" && infoSessionId.length > 0) return infoSessionId
|
||||||
|
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getEventToolName(properties: EventProperties): string | undefined {
|
||||||
|
const tool = properties?.tool
|
||||||
|
if (typeof tool === "string" && tool.length > 0) return tool
|
||||||
|
|
||||||
|
const name = properties?.name
|
||||||
|
if (typeof name === "string" && name.length > 0) return name
|
||||||
|
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getQuestionText(properties: EventProperties): string {
|
||||||
|
const args = properties?.args
|
||||||
|
if (!isRecord(args)) return ""
|
||||||
|
|
||||||
|
const questions = args.questions
|
||||||
|
if (!Array.isArray(questions) || questions.length === 0) return ""
|
||||||
|
|
||||||
|
const firstQuestion = questions[0]
|
||||||
|
if (!isRecord(firstQuestion)) return ""
|
||||||
|
|
||||||
|
const questionText = firstQuestion.question
|
||||||
|
return typeof questionText === "string" ? questionText : ""
|
||||||
|
}
|
||||||
@@ -8,6 +8,11 @@ import {
|
|||||||
type Platform,
|
type Platform,
|
||||||
} from "./session-notification-sender"
|
} from "./session-notification-sender"
|
||||||
import * as sessionNotificationSender from "./session-notification-sender"
|
import * as sessionNotificationSender from "./session-notification-sender"
|
||||||
|
import {
|
||||||
|
getEventToolName,
|
||||||
|
getQuestionText,
|
||||||
|
getSessionID,
|
||||||
|
} from "./session-notification-event-properties"
|
||||||
import { hasIncompleteTodos } from "./session-todo-status"
|
import { hasIncompleteTodos } from "./session-todo-status"
|
||||||
import { createIdleNotificationScheduler } from "./session-notification-scheduler"
|
import { createIdleNotificationScheduler } from "./session-notification-scheduler"
|
||||||
|
|
||||||
@@ -85,23 +90,6 @@ export function createSessionNotification(
|
|||||||
const PERMISSION_EVENTS = new Set(["permission.ask", "permission.asked", "permission.updated", "permission.requested"])
|
const PERMISSION_EVENTS = new Set(["permission.ask", "permission.asked", "permission.updated", "permission.requested"])
|
||||||
const PERMISSION_HINT_PATTERN = /\b(permission|approve|approval|allow|deny|consent)\b/i
|
const PERMISSION_HINT_PATTERN = /\b(permission|approve|approval|allow|deny|consent)\b/i
|
||||||
|
|
||||||
const getSessionID = (properties: Record<string, unknown> | undefined): string | undefined => {
|
|
||||||
const sessionID = properties?.sessionID
|
|
||||||
if (typeof sessionID === "string" && sessionID.length > 0) return sessionID
|
|
||||||
|
|
||||||
const sessionId = properties?.sessionId
|
|
||||||
if (typeof sessionId === "string" && sessionId.length > 0) return sessionId
|
|
||||||
|
|
||||||
const info = properties?.info as Record<string, unknown> | undefined
|
|
||||||
const infoSessionID = info?.sessionID
|
|
||||||
if (typeof infoSessionID === "string" && infoSessionID.length > 0) return infoSessionID
|
|
||||||
|
|
||||||
const infoSessionId = info?.sessionId
|
|
||||||
if (typeof infoSessionId === "string" && infoSessionId.length > 0) return infoSessionId
|
|
||||||
|
|
||||||
return undefined
|
|
||||||
}
|
|
||||||
|
|
||||||
const shouldNotifyForSession = (sessionID: string): boolean => {
|
const shouldNotifyForSession = (sessionID: string): boolean => {
|
||||||
if (subagentSessions.has(sessionID)) return false
|
if (subagentSessions.has(sessionID)) return false
|
||||||
|
|
||||||
@@ -113,26 +101,6 @@ export function createSessionNotification(
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
const getEventToolName = (properties: Record<string, unknown> | undefined): string | undefined => {
|
|
||||||
const tool = properties?.tool
|
|
||||||
if (typeof tool === "string" && tool.length > 0) return tool
|
|
||||||
|
|
||||||
const name = properties?.name
|
|
||||||
if (typeof name === "string" && name.length > 0) return name
|
|
||||||
|
|
||||||
return undefined
|
|
||||||
}
|
|
||||||
|
|
||||||
const getQuestionText = (properties: Record<string, unknown> | undefined): string => {
|
|
||||||
const args = properties?.args as Record<string, unknown> | undefined
|
|
||||||
const questions = args?.questions
|
|
||||||
if (!Array.isArray(questions) || questions.length === 0) return ""
|
|
||||||
|
|
||||||
const firstQuestion = questions[0] as Record<string, unknown> | undefined
|
|
||||||
const questionText = firstQuestion?.question
|
|
||||||
return typeof questionText === "string" ? questionText : ""
|
|
||||||
}
|
|
||||||
|
|
||||||
return async ({ event }: { event: { type: string; properties?: unknown } }) => {
|
return async ({ event }: { event: { type: string; properties?: unknown } }) => {
|
||||||
if (currentPlatform === "unsupported") return
|
if (currentPlatform === "unsupported") return
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user