loopengine 0.3.2 → 0.3.4
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/dist/core/run-events.d.ts +21 -0
- package/dist/core/run-events.js +20 -0
- package/dist/index.d.ts +7 -3
- package/dist/index.js +7 -3
- package/package.json +3 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Message } from './run-agent.js';
|
|
2
|
+
export type RunEventSource = 'workflow' | 'schedule' | 'message' | 'slack' | 'telegram';
|
|
3
|
+
export interface RunEvent {
|
|
4
|
+
at: string;
|
|
5
|
+
agent: string;
|
|
6
|
+
source: RunEventSource;
|
|
7
|
+
/** The same for every report of the same job. */
|
|
8
|
+
id: string;
|
|
9
|
+
/** workflow only: how the run started. */
|
|
10
|
+
via?: string;
|
|
11
|
+
/** message only. */
|
|
12
|
+
caller?: 'api' | 'console' | 'unknown';
|
|
13
|
+
usedTool: boolean;
|
|
14
|
+
}
|
|
15
|
+
export type RunObserver = (event: RunEvent) => void;
|
|
16
|
+
/** Sets the one observer for this process; undefined removes it. */
|
|
17
|
+
export declare function setRunObserver(next: RunObserver | undefined): void;
|
|
18
|
+
/** Never throws: a broken observer must not fail the job. */
|
|
19
|
+
export declare function reportRun(event: Omit<RunEvent, 'at'>): void;
|
|
20
|
+
/** Whether a turn's new messages include a tool call by the agent. */
|
|
21
|
+
export declare function usedTool(newMessages: Message[]): boolean;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
let observer;
|
|
2
|
+
/** Sets the one observer for this process; undefined removes it. */
|
|
3
|
+
export function setRunObserver(next) {
|
|
4
|
+
observer = next;
|
|
5
|
+
}
|
|
6
|
+
/** Never throws: a broken observer must not fail the job. */
|
|
7
|
+
export function reportRun(event) {
|
|
8
|
+
if (!observer)
|
|
9
|
+
return;
|
|
10
|
+
try {
|
|
11
|
+
observer({ ...event, at: new Date().toISOString() });
|
|
12
|
+
}
|
|
13
|
+
catch (err) {
|
|
14
|
+
console.error('[loopengine] run observer failed:', err instanceof Error ? err.message : err);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/** Whether a turn's new messages include a tool call by the agent. */
|
|
18
|
+
export function usedTool(newMessages) {
|
|
19
|
+
return newMessages.some((m) => m.role === 'assistant' && Array.isArray(m.content) && m.content.some((b) => b.type === 'tool_use'));
|
|
20
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,21 +7,25 @@ export { createAgentEnv, agentDirFor, envScopeOf, type EnvScope } from '#core/ag
|
|
|
7
7
|
export { FileSecretStore, setSecretStore, getSecretStore, type SecretStore } from '#core/secret-store.js';
|
|
8
8
|
export { signProxyIdentity, verifyProxyIdentity, TRUSTED_PROXY_IDENTITY_HEADER, type ProxyIdentity } from '#core/trusted-proxy.js';
|
|
9
9
|
export { setUsageSink, recordUsage, type UsageEvent, type UsageSink } from '#core/usage.js';
|
|
10
|
+
export { setRunObserver, reportRun, usedTool, type RunEvent, type RunEventSource, type RunObserver } from '#core/run-events.js';
|
|
10
11
|
export { readNotifierFile, writeNotifierFile, removeNotifierFile, validateNotifierFile, notifierConfigFromFile, NotifierFileError, NOTIFIER_SECRET_VARS, type NotifierFile, type MessagingApprover } from '#core/notifier-file.js';
|
|
11
12
|
export { listDeliveries, recordDelivery, type NotifierDelivery } from '#core/notifier-deliveries.js';
|
|
12
13
|
export { describeNotifier } from '#core/http-notifier.js';
|
|
13
14
|
export { Scheduler, ScheduleError, FileSchedulerStore, getSchedulerStore, setSchedulerStore, createScheduledTask, listScheduledTasks, getScheduledTask, cancelScheduledTask, pauseScheduledTask, resumeScheduledTask, runScheduledTaskNow, setScheduledTaskNotify, deleteScheduledTask, nextScheduledWakeAt, moveScheduledTasksToTimeZone, importLegacyScheduledTasks, parseEvery, describeSchedule, type ScheduledTask, type ScheduledTaskRun, type ScheduledTaskStatus, type Schedule, type SchedulerStore, type FireTask, type CreateScheduledTaskInput } from '#core/scheduler.js';
|
|
14
15
|
export { NOTIFIER_SLACK_SIGNING_SECRET_VAR } from '#core/notifier-file.js';
|
|
15
|
-
export { firstSighting, handleInboundMessage, handleMessagingAction, settleThreadChoice, isPlainApproval, type MessagingDeps, type MessagingDecision, type DecisionOutcome } from '#core/messaging/engine.js';
|
|
16
|
+
export { firstSighting, handleInboundMessage, handleMessagingAction, settleThreadChoice, isPlainApproval, outcomeText, type MessagingDeps, type MessagingDecision, type DecisionOutcome } from '#core/messaging/engine.js';
|
|
17
|
+
export { handleJobMessage, isJobMessage, settleJobThread, jobSessionId, findJobFor, type JobDeps, type JobTurn } from '#core/messaging/jobs.js';
|
|
16
18
|
export { formatArgs, formatChange, labelFor } from '#core/messaging/format-args.js';
|
|
17
19
|
export { decideReply, proposeEdit, describeChange, type ReplyDecision, type DecisionRequest } from '#core/messaging/decide.js';
|
|
18
|
-
export { recordThread, findThread, findThreadByPending, type ThreadLink } from '#core/messaging/threads.js';
|
|
20
|
+
export { recordThread, findThread, findThreadByPending, recordJobThread, findJobThread, findJobThreadBySession, type ThreadLink, type JobThread } from '#core/messaging/threads.js';
|
|
19
21
|
export type { InboundMessage, MessagingConnector, ThreadMessage, MessagingChoice, MessagingAction } from '#core/messaging/connector.js';
|
|
20
22
|
export { parseSlackEvent, createSlackConnector, verifySlackRequest, parseSlackInteraction, openSlackAnswerModal, replyInSlack, replyPrivatelyInSlack, slackOutcomeText, listSlackChannels, listSlackChannelMembers, slackAppManifest, toSlackMrkdwn, slackArgs, slackEscape, type SlackEvent, type SlackInteraction, type SlackChannel } from '#core/messaging/connectors/slack/index.js';
|
|
21
23
|
export { createDecisionToken, verifyDecisionToken, decidePath, decideLinkMaker, decisionLinkTtlMs, type DecisionKind } from '#core/approval-links.js';
|
|
22
24
|
export { renderDecidePage, renderDecideGonePage, renderDecideInvalidPage, type DecidePageItem } from './web/decide-page.js';
|
|
23
|
-
export { sendTestWebhook } from '#core/http-notify-triggers/webhook.js';
|
|
25
|
+
export { sendTestWebhook, publicBaseUrl } from '#core/http-notify-triggers/webhook.js';
|
|
24
26
|
export { describeAgentNotifier, saveAgentNotifier, removeAgentNotifier, setAgentPrimaryNotifier, testAgentNotifier, listAgentPending, slackCredentialsFor, slackConversationsOn, slackClickAllowed, agentApprovers, setAgentApprovers, listAgentSlackMembers, listAgentSlackChannels, announceToNotifier, type DefaultWebhook } from './web/notifier-admin.js';
|
|
27
|
+
export { clickAllowed, conversationsOn, jobsOn, jobAllowed, connectionPublicUrl, telegramCredentialsFor, telegramHomeChat, listAgentTelegramPeople, setupAgentTelegramWebhook, agentTelegramWebhookInfo, type TwoWayApp } from './web/notifier-admin.js';
|
|
28
|
+
export { createTelegramConnector, parseTelegramUpdate, verifyTelegramRequest, telegramCallbackData, answerTelegramClick, editTelegramMessage, telegramBotUsername, setTelegramWebhook, telegramWebhookInfo, callTelegram, recordTelegramMessage, readTelegramThread, telegramRootOf, telegramPeople, toTelegramHtml, telegramEscape, telegramArgs, type TelegramUpdate, type TelegramButton, type TelegramPerson, } from '#core/messaging/connectors/telegram/index.js';
|
|
25
29
|
export type * from './core/loop-events.js';
|
|
26
30
|
export { streamMessage, streamMessageWithCallbacks, sendMessage, approveCall, denyCall, answerQuestion, getSessionHistory, } from './core/client.js';
|
|
27
31
|
export type { RequestOptions, SendMessageResult, PendingApprovalResult, PendingQuestionResult, PendingResult, MessageResult, StreamMessageCallbacks, } from './core/client.js';
|
package/dist/index.js
CHANGED
|
@@ -9,20 +9,24 @@ export { createAgentEnv, agentDirFor, envScopeOf } from '#core/agent-env.js';
|
|
|
9
9
|
export { FileSecretStore, setSecretStore, getSecretStore } from '#core/secret-store.js';
|
|
10
10
|
export { signProxyIdentity, verifyProxyIdentity, TRUSTED_PROXY_IDENTITY_HEADER } from '#core/trusted-proxy.js';
|
|
11
11
|
export { setUsageSink, recordUsage } from '#core/usage.js';
|
|
12
|
+
export { setRunObserver, reportRun, usedTool } from '#core/run-events.js';
|
|
12
13
|
export { readNotifierFile, writeNotifierFile, removeNotifierFile, validateNotifierFile, notifierConfigFromFile, NotifierFileError, NOTIFIER_SECRET_VARS } from '#core/notifier-file.js';
|
|
13
14
|
export { listDeliveries, recordDelivery } from '#core/notifier-deliveries.js';
|
|
14
15
|
export { describeNotifier } from '#core/http-notifier.js';
|
|
15
16
|
export { Scheduler, ScheduleError, FileSchedulerStore, getSchedulerStore, setSchedulerStore, createScheduledTask, listScheduledTasks, getScheduledTask, cancelScheduledTask, pauseScheduledTask, resumeScheduledTask, runScheduledTaskNow, setScheduledTaskNotify, deleteScheduledTask, nextScheduledWakeAt, moveScheduledTasksToTimeZone, importLegacyScheduledTasks, parseEvery, describeSchedule } from '#core/scheduler.js';
|
|
16
17
|
export { NOTIFIER_SLACK_SIGNING_SECRET_VAR } from '#core/notifier-file.js';
|
|
17
|
-
export { firstSighting, handleInboundMessage, handleMessagingAction, settleThreadChoice, isPlainApproval } from '#core/messaging/engine.js';
|
|
18
|
+
export { firstSighting, handleInboundMessage, handleMessagingAction, settleThreadChoice, isPlainApproval, outcomeText } from '#core/messaging/engine.js';
|
|
19
|
+
export { handleJobMessage, isJobMessage, settleJobThread, jobSessionId, findJobFor } from '#core/messaging/jobs.js';
|
|
18
20
|
export { formatArgs, formatChange, labelFor } from '#core/messaging/format-args.js';
|
|
19
21
|
export { decideReply, proposeEdit, describeChange } from '#core/messaging/decide.js';
|
|
20
|
-
export { recordThread, findThread, findThreadByPending } from '#core/messaging/threads.js';
|
|
22
|
+
export { recordThread, findThread, findThreadByPending, recordJobThread, findJobThread, findJobThreadBySession } from '#core/messaging/threads.js';
|
|
21
23
|
export { parseSlackEvent, createSlackConnector, verifySlackRequest, parseSlackInteraction, openSlackAnswerModal, replyInSlack, replyPrivatelyInSlack, slackOutcomeText, listSlackChannels, listSlackChannelMembers, slackAppManifest, toSlackMrkdwn, slackArgs, slackEscape } from '#core/messaging/connectors/slack/index.js';
|
|
22
24
|
export { createDecisionToken, verifyDecisionToken, decidePath, decideLinkMaker, decisionLinkTtlMs } from '#core/approval-links.js';
|
|
23
25
|
export { renderDecidePage, renderDecideGonePage, renderDecideInvalidPage } from './web/decide-page.js';
|
|
24
|
-
export { sendTestWebhook } from '#core/http-notify-triggers/webhook.js';
|
|
26
|
+
export { sendTestWebhook, publicBaseUrl } from '#core/http-notify-triggers/webhook.js';
|
|
25
27
|
export { describeAgentNotifier, saveAgentNotifier, removeAgentNotifier, setAgentPrimaryNotifier, testAgentNotifier, listAgentPending, slackCredentialsFor, slackConversationsOn, slackClickAllowed, agentApprovers, setAgentApprovers, listAgentSlackMembers, listAgentSlackChannels, announceToNotifier } from './web/notifier-admin.js';
|
|
28
|
+
export { clickAllowed, conversationsOn, jobsOn, jobAllowed, connectionPublicUrl, telegramCredentialsFor, telegramHomeChat, listAgentTelegramPeople, setupAgentTelegramWebhook, agentTelegramWebhookInfo } from './web/notifier-admin.js';
|
|
29
|
+
export { createTelegramConnector, parseTelegramUpdate, verifyTelegramRequest, telegramCallbackData, answerTelegramClick, editTelegramMessage, telegramBotUsername, setTelegramWebhook, telegramWebhookInfo, callTelegram, recordTelegramMessage, readTelegramThread, telegramRootOf, telegramPeople, toTelegramHtml, telegramEscape, telegramArgs, } from '#core/messaging/connectors/telegram/index.js';
|
|
26
30
|
// The framework-agnostic browser client for adapters/http.ts's own wire
|
|
27
31
|
// protocol (see client.ts's own header comment) — this, not a deep
|
|
28
32
|
// subpath import, is how a consumer's React/Vue/etc. chat UI is meant to
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "loopengine",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Runtime for tool-using AI agents with a transparent ReAct loop.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -46,6 +46,8 @@
|
|
|
46
46
|
"dist/core/trusted-proxy.d.ts",
|
|
47
47
|
"dist/core/usage.js",
|
|
48
48
|
"dist/core/usage.d.ts",
|
|
49
|
+
"dist/core/run-events.js",
|
|
50
|
+
"dist/core/run-events.d.ts",
|
|
49
51
|
"dist/core/email-senders.js",
|
|
50
52
|
"dist/core/email-senders.d.ts",
|
|
51
53
|
"dist/core/notifier-file.js",
|