( prompt: Prompt.Prompt, approved: ReadonlyArray<ApprovalResult>, denied: ReadonlyArray<ApprovalResult> )
| 1933 | * requests it never issued). |
| 1934 | */ |
| 1935 | const stripResolvedApprovals = ( |
| 1936 | prompt: Prompt.Prompt, |
| 1937 | approved: ReadonlyArray<ApprovalResult>, |
| 1938 | denied: ReadonlyArray<ApprovalResult> |
| 1939 | ): Prompt.Prompt => { |
| 1940 | const resolvedApprovalIds = new Set<string>() |
| 1941 | for (const a of approved) resolvedApprovalIds.add(a.approvalId) |
| 1942 | for (const d of denied) resolvedApprovalIds.add(d.approvalId) |
| 1943 | |
| 1944 | const cleanedMessages: Array<Prompt.Message> = [] |
| 1945 | |
| 1946 | for (const message of prompt.content) { |
| 1947 | if (message.role === "assistant") { |
| 1948 | const filteredContent = message.content.filter( |
| 1949 | (part) => |
| 1950 | part.type !== "tool-approval-request" || |
| 1951 | !resolvedApprovalIds.has(part.approvalId) |
| 1952 | ) |
| 1953 | if (filteredContent.length > 0) { |
| 1954 | cleanedMessages.push( |
| 1955 | Prompt.makeMessage("assistant", { |
| 1956 | content: filteredContent, |
| 1957 | options: message.options |
| 1958 | }) |
| 1959 | ) |
| 1960 | } |
| 1961 | } else if (message.role === "tool") { |
| 1962 | const filteredContent = message.content.filter( |
| 1963 | (part) => |
| 1964 | part.type !== "tool-approval-response" || |
| 1965 | !resolvedApprovalIds.has(part.approvalId) |
| 1966 | ) |
| 1967 | if (filteredContent.length > 0) { |
| 1968 | cleanedMessages.push( |
| 1969 | Prompt.makeMessage("tool", { |
| 1970 | content: filteredContent, |
| 1971 | options: message.options |
| 1972 | }) |
| 1973 | ) |
| 1974 | } |
| 1975 | } else { |
| 1976 | cleanedMessages.push(message) |
| 1977 | } |
| 1978 | } |
| 1979 | |
| 1980 | return Prompt.fromMessages(cleanedMessages) |
| 1981 | } |
| 1982 | |
| 1983 | const isApprovalNeeded = Effect.fnUntraced(function*<T extends Tool.Any>( |
| 1984 | tool: T, |
no test coverage detected