@gencode/agents 0.0.3 → 0.0.5

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.
Files changed (72) hide show
  1. package/dist/commands/help.js +6 -6
  2. package/dist/commands/help.js.map +1 -1
  3. package/dist/commands/new.d.ts.map +1 -1
  4. package/dist/commands/new.js +12 -1
  5. package/dist/commands/new.js.map +1 -1
  6. package/dist/commands/registry.js +5 -5
  7. package/dist/commands/registry.js.map +1 -1
  8. package/dist/plugins/hooks.d.ts +20 -1
  9. package/dist/plugins/hooks.d.ts.map +1 -1
  10. package/dist/plugins/hooks.js.map +1 -1
  11. package/dist/plugins/index.d.ts +1 -1
  12. package/dist/plugins/index.d.ts.map +1 -1
  13. package/dist/plugins/index.js.map +1 -1
  14. package/dist/plugins/loader.js +1 -1
  15. package/dist/plugins/loader.js.map +1 -1
  16. package/dist/plugins/runtime.d.ts +9 -1
  17. package/dist/plugins/runtime.d.ts.map +1 -1
  18. package/dist/plugins/runtime.js +24 -4
  19. package/dist/plugins/runtime.js.map +1 -1
  20. package/dist/runner/agent-runtime.d.ts +62 -0
  21. package/dist/runner/agent-runtime.d.ts.map +1 -0
  22. package/dist/runner/agent-runtime.js +179 -0
  23. package/dist/runner/agent-runtime.js.map +1 -0
  24. package/dist/runner/announce-loop.d.ts +41 -0
  25. package/dist/runner/announce-loop.d.ts.map +1 -0
  26. package/dist/runner/announce-loop.js +94 -0
  27. package/dist/runner/announce-loop.js.map +1 -0
  28. package/dist/runner/event-dispatcher.d.ts +31 -0
  29. package/dist/runner/event-dispatcher.d.ts.map +1 -0
  30. package/dist/runner/event-dispatcher.js +87 -0
  31. package/dist/runner/event-dispatcher.js.map +1 -0
  32. package/dist/runner/finalizer.d.ts +30 -0
  33. package/dist/runner/finalizer.d.ts.map +1 -0
  34. package/dist/runner/finalizer.js +75 -0
  35. package/dist/runner/finalizer.js.map +1 -0
  36. package/dist/runner/invocation-resolver.d.ts +67 -0
  37. package/dist/runner/invocation-resolver.d.ts.map +1 -0
  38. package/dist/runner/invocation-resolver.js +224 -0
  39. package/dist/runner/invocation-resolver.js.map +1 -0
  40. package/dist/runner/plugin-context.d.ts +18 -0
  41. package/dist/runner/plugin-context.d.ts.map +1 -0
  42. package/dist/runner/plugin-context.js +26 -0
  43. package/dist/runner/plugin-context.js.map +1 -0
  44. package/dist/runner/run-context.d.ts +38 -0
  45. package/dist/runner/run-context.d.ts.map +1 -0
  46. package/dist/runner/run-context.js +159 -0
  47. package/dist/runner/run-context.js.map +1 -0
  48. package/dist/runner/runner-session.d.ts +34 -0
  49. package/dist/runner/runner-session.d.ts.map +1 -0
  50. package/dist/runner/runner-session.js +61 -0
  51. package/dist/runner/runner-session.js.map +1 -0
  52. package/dist/runner/runner.d.ts +1 -2
  53. package/dist/runner/runner.d.ts.map +1 -1
  54. package/dist/runner/runner.js +115 -874
  55. package/dist/runner/runner.js.map +1 -1
  56. package/dist/runner/runtime.d.ts +7 -0
  57. package/dist/runner/runtime.d.ts.map +1 -0
  58. package/dist/runner/runtime.js +21 -0
  59. package/dist/runner/runtime.js.map +1 -0
  60. package/dist/runner/session-lifecycle.d.ts +31 -0
  61. package/dist/runner/session-lifecycle.d.ts.map +1 -0
  62. package/dist/runner/session-lifecycle.js +46 -0
  63. package/dist/runner/session-lifecycle.js.map +1 -0
  64. package/dist/runner/title.d.ts +3 -0
  65. package/dist/runner/title.d.ts.map +1 -0
  66. package/dist/runner/title.js +6 -0
  67. package/dist/runner/title.js.map +1 -0
  68. package/dist/runner/turn-executor.d.ts +51 -0
  69. package/dist/runner/turn-executor.d.ts.map +1 -0
  70. package/dist/runner/turn-executor.js +255 -0
  71. package/dist/runner/turn-executor.js.map +1 -0
  72. package/package.json +1 -1
@@ -0,0 +1,41 @@
1
+ import type { Agent } from "@mariozechner/pi-agent-core";
2
+ import type { AgentRunParams, AssistantEntry, ToolResultEntry } from "../types.js";
3
+ import type { PluginHookRegistry } from "../plugins/hooks.js";
4
+ import type { SubagentRegistry } from "../subagent/registry.js";
5
+ import { RunEventDispatcher } from "./event-dispatcher.js";
6
+ import { SkillUsageTracker } from "./skill-usage.js";
7
+ /**
8
+ * Feeds completed subagent results back into the parent agent until no more
9
+ * announcements are pending or the safety cap is reached. This keeps the
10
+ * multi-agent follow-up protocol out of the main runner loop.
11
+ */
12
+ export declare function runAnnounceLoop(params: {
13
+ agent: Agent;
14
+ registry: SubagentRegistry;
15
+ sessionId: string;
16
+ resolvedModelId: string;
17
+ eventDispatcher: RunEventDispatcher;
18
+ skillUsageTracker: SkillUsageTracker;
19
+ hookRegistry: PluginHookRegistry;
20
+ hookContext: {
21
+ sessionId?: string;
22
+ workspaceDir?: string;
23
+ channel?: AgentRunParams["channel"];
24
+ };
25
+ abortSignal?: AbortSignal;
26
+ appendEntry: (entry: AssistantEntry | ToolResultEntry | {
27
+ role: "assistant";
28
+ content: string;
29
+ timestamp: string;
30
+ } | {
31
+ role: "user";
32
+ content: string;
33
+ timestamp: string;
34
+ }) => Promise<void>;
35
+ }): Promise<{
36
+ text: string;
37
+ inputTokens: number;
38
+ outputTokens: number;
39
+ error?: string;
40
+ }>;
41
+ //# sourceMappingURL=announce-loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"announce-loop.d.ts","sourceRoot":"","sources":["../../src/runner/announce-loop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAKrD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE;IAC5C,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,kBAAkB,CAAC;IACpC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,YAAY,EAAE,kBAAkB,CAAC;IACjC,WAAW,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAA;KAAE,CAAC;IAChG,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,EAAE,CACX,KAAK,EACD,cAAc,GACd,eAAe,GACf;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GACzD;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KACrD,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkFvF"}
@@ -0,0 +1,94 @@
1
+ import { buildSubagentAnnounceMessage } from "../tools/subagent-spawn.js";
2
+ import { RunEventDispatcher } from "./event-dispatcher.js";
3
+ import { SkillUsageTracker } from "./skill-usage.js";
4
+ import { executeAgentTurn, persistTurnEntriesWithWriter } from "./turn-executor.js";
5
+ const MAX_ANNOUNCE_ROUNDS = 10;
6
+ /**
7
+ * Feeds completed subagent results back into the parent agent until no more
8
+ * announcements are pending or the safety cap is reached. This keeps the
9
+ * multi-agent follow-up protocol out of the main runner loop.
10
+ */
11
+ export async function runAnnounceLoop(params) {
12
+ const { agent, registry, sessionId, resolvedModelId, eventDispatcher, skillUsageTracker, hookRegistry, hookContext, abortSignal, appendEntry, } = params;
13
+ let announceRound = 0;
14
+ let lastResponseText = "";
15
+ let totalInputTokens = 0;
16
+ let totalOutputTokens = 0;
17
+ let runError;
18
+ // Multiple child runs may complete between turns, so announce them in
19
+ // batches to minimize extra parent turns.
20
+ while (!abortSignal?.aborted &&
21
+ registry.needsAnnounce(sessionId) &&
22
+ announceRound < MAX_ANNOUNCE_ROUNDS) {
23
+ announceRound++;
24
+ await registry.waitForAll(sessionId);
25
+ const completed = registry.consumeCompleted(sessionId);
26
+ if (completed.length === 0) {
27
+ break;
28
+ }
29
+ for (const record of completed) {
30
+ await eventDispatcher.dispatchProgress(sessionId, {
31
+ type: "subagent_complete",
32
+ childSessionId: record.childSessionId,
33
+ task: record.task,
34
+ status: record.status,
35
+ });
36
+ }
37
+ const announceMsg = buildBatchAnnounceMessage(completed);
38
+ await appendEntry({
39
+ role: "user",
40
+ content: announceMsg,
41
+ timestamp: new Date().toISOString(),
42
+ });
43
+ const announceTurn = await executeAgentTurn({
44
+ agent,
45
+ message: announceMsg,
46
+ sessionId,
47
+ modelId: resolvedModelId,
48
+ historyMessages: [],
49
+ eventDispatcher,
50
+ skillUsageTracker,
51
+ hooks: hookRegistry,
52
+ hookCtx: hookContext,
53
+ abortSignal,
54
+ });
55
+ lastResponseText = announceTurn.text;
56
+ totalInputTokens += announceTurn.inputTokens;
57
+ totalOutputTokens += announceTurn.outputTokens;
58
+ if (announceTurn.error && !runError) {
59
+ runError = announceTurn.error;
60
+ }
61
+ await persistTurnEntriesWithWriter(appendEntry, announceTurn);
62
+ }
63
+ return {
64
+ text: lastResponseText,
65
+ inputTokens: totalInputTokens,
66
+ outputTokens: totalOutputTokens,
67
+ error: runError,
68
+ };
69
+ }
70
+ /**
71
+ * Preserves the single-subagent announce format while still supporting a
72
+ * batched representation when several children finish together.
73
+ */
74
+ function buildBatchAnnounceMessage(completed) {
75
+ if (completed.length === 1) {
76
+ const r = completed[0];
77
+ return buildSubagentAnnounceMessage({
78
+ task: r.task,
79
+ label: r.label,
80
+ status: r.status,
81
+ result: r.result,
82
+ error: r.error,
83
+ });
84
+ }
85
+ const parts = completed.map((r) => buildSubagentAnnounceMessage({
86
+ task: r.task,
87
+ label: r.label,
88
+ status: r.status,
89
+ result: r.result,
90
+ error: r.error,
91
+ }));
92
+ return `[${completed.length} subagents completed]\n\n${parts.join("\n\n---\n\n")}`;
93
+ }
94
+ //# sourceMappingURL=announce-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"announce-loop.js","sourceRoot":"","sources":["../../src/runner/announce-loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { AgentRunParams, AgentProgressEvent, CallbackPayload } from "../types.js";
2
+ type EventDispatchParams = Pick<AgentRunParams, "onProgress" | "callbackUrl" | "messageId" | "channel">;
3
+ type RunDoneResult = {
4
+ text: string;
5
+ usage: {
6
+ input: number;
7
+ output: number;
8
+ total: number;
9
+ };
10
+ durationMs: number;
11
+ };
12
+ /**
13
+ * Emits runner events to in-process listeners and optional HTTP callbacks.
14
+ * Callback failures are intentionally ignored so they do not interrupt the run.
15
+ */
16
+ export declare class RunEventDispatcher {
17
+ private readonly params;
18
+ constructor(params: EventDispatchParams);
19
+ sendCallback(url: string, payload: CallbackPayload): Promise<void>;
20
+ dispatchProgress(sessionId: string, event: AgentProgressEvent): Promise<void>;
21
+ dispatchStart(sessionId: string, message: string): Promise<void>;
22
+ dispatchDone(sessionId: string, result: RunDoneResult): Promise<void>;
23
+ dispatchError(sessionId: string, message: string): Promise<void>;
24
+ dispatchSessionReset(sessionId: string, payload: {
25
+ action: "new" | "reset";
26
+ previousSessionId?: string;
27
+ message: string;
28
+ }): Promise<void>;
29
+ }
30
+ export {};
31
+ //# sourceMappingURL=event-dispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-dispatcher.d.ts","sourceRoot":"","sources":["../../src/runner/event-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEvF,KAAK,mBAAmB,GAAG,IAAI,CAAC,cAAc,EAAE,YAAY,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,CAAC,CAAC;AACxG,KAAK,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnH;;;GAGG;AACH,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,mBAAmB;IAElD,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAYlE,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB7E,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAchE,YAAY,CAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC;IAcV,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAchE,oBAAoB,CACxB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;QAAE,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAChF,OAAO,CAAC,IAAI,CAAC;CAejB"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Emits runner events to in-process listeners and optional HTTP callbacks.
3
+ * Callback failures are intentionally ignored so they do not interrupt the run.
4
+ */
5
+ export class RunEventDispatcher {
6
+ params;
7
+ constructor(params) {
8
+ this.params = params;
9
+ }
10
+ async sendCallback(url, payload) {
11
+ try {
12
+ await fetch(url, {
13
+ method: "POST",
14
+ headers: { "content-type": "application/json" },
15
+ body: JSON.stringify(payload),
16
+ });
17
+ }
18
+ catch {
19
+ // Callback failures are non-fatal
20
+ }
21
+ }
22
+ async dispatchProgress(sessionId, event) {
23
+ const eventWithMessageId = this.params.messageId ? { ...event, messageId: this.params.messageId } : event;
24
+ await this.params.onProgress?.(eventWithMessageId);
25
+ if (!this.params.callbackUrl) {
26
+ return;
27
+ }
28
+ await this.sendCallback(this.params.callbackUrl, {
29
+ sessionId,
30
+ channel: this.params.channel,
31
+ messageId: this.params.messageId,
32
+ type: "progress",
33
+ event: eventWithMessageId,
34
+ });
35
+ }
36
+ async dispatchStart(sessionId, message) {
37
+ if (!this.params.callbackUrl) {
38
+ return;
39
+ }
40
+ await this.sendCallback(this.params.callbackUrl, {
41
+ sessionId,
42
+ channel: this.params.channel,
43
+ messageId: this.params.messageId,
44
+ type: "start",
45
+ message,
46
+ });
47
+ }
48
+ async dispatchDone(sessionId, result) {
49
+ if (!this.params.callbackUrl) {
50
+ return;
51
+ }
52
+ await this.sendCallback(this.params.callbackUrl, {
53
+ sessionId,
54
+ channel: this.params.channel,
55
+ messageId: this.params.messageId,
56
+ type: "done",
57
+ result,
58
+ });
59
+ }
60
+ async dispatchError(sessionId, message) {
61
+ if (!this.params.callbackUrl) {
62
+ return;
63
+ }
64
+ await this.sendCallback(this.params.callbackUrl, {
65
+ sessionId,
66
+ channel: this.params.channel,
67
+ messageId: this.params.messageId,
68
+ type: "error",
69
+ message,
70
+ });
71
+ }
72
+ async dispatchSessionReset(sessionId, payload) {
73
+ if (!this.params.callbackUrl) {
74
+ return;
75
+ }
76
+ await this.sendCallback(this.params.callbackUrl, {
77
+ sessionId,
78
+ channel: this.params.channel,
79
+ messageId: this.params.messageId,
80
+ type: "session_reset",
81
+ action: payload.action,
82
+ previousSessionId: payload.previousSessionId,
83
+ message: payload.message,
84
+ });
85
+ }
86
+ }
87
+ //# sourceMappingURL=event-dispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-dispatcher.js","sourceRoot":"","sources":["../../src/runner/event-dispatcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { PluginHookAgentContext, PluginHookRegistry } from "../plugins/hooks.js";
2
+ import type { AgentRunParams, AgentRunResult, CompactionEntry } from "../types.js";
3
+ import { RunEventDispatcher } from "./event-dispatcher.js";
4
+ type Usage = {
5
+ input: number;
6
+ output: number;
7
+ total: number;
8
+ };
9
+ type FinalizeSharedParams = {
10
+ sessionId: string;
11
+ isNewSession: boolean;
12
+ transcriptMessage: string;
13
+ runParams: AgentRunParams;
14
+ hookRegistry: PluginHookRegistry;
15
+ hookContext: PluginHookAgentContext;
16
+ startTime: number;
17
+ eventDispatcher: RunEventDispatcher;
18
+ };
19
+ export declare function finalizeShortCircuitRun(params: FinalizeSharedParams & {
20
+ replyText: string;
21
+ initialUserEntryPersisted?: boolean;
22
+ compactionEntry?: CompactionEntry;
23
+ }): Promise<AgentRunResult>;
24
+ export declare function finalizeCompletedRun(params: FinalizeSharedParams & {
25
+ text: string;
26
+ usage: Usage;
27
+ error?: string;
28
+ }): Promise<AgentRunResult>;
29
+ export {};
30
+ //# sourceMappingURL=finalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finalizer.d.ts","sourceRoot":"","sources":["../../src/runner/finalizer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAI3D,KAAK,KAAK,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9D,KAAK,oBAAoB,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,cAAc,CAAC;IAC1B,YAAY,EAAE,kBAAkB,CAAC;IACjC,WAAW,EAAE,sBAAsB,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,kBAAkB,CAAC;CACrC,CAAC;AAEF,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,GAAG;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,OAAO,CAAC,cAAc,CAAC,CA2D1B;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,cAAc,CAAC,CAyC1B"}
@@ -0,0 +1,75 @@
1
+ import { appendTranscriptEntry, saveSessionMetadata } from "../session/session.js";
2
+ import { generateSessionTitle } from "./title.js";
3
+ import { RunEventDispatcher } from "./event-dispatcher.js";
4
+ import { buildNewSessionMetadata } from "./run-context.js";
5
+ import { finishSessionLifecycle } from "./session-lifecycle.js";
6
+ export async function finalizeShortCircuitRun(params) {
7
+ const { replyText, sessionId, isNewSession, transcriptMessage, initialUserEntryPersisted = false, runParams, hookRegistry, hookContext, startTime, compactionEntry, eventDispatcher, } = params;
8
+ if (!initialUserEntryPersisted) {
9
+ await appendTranscriptEntry(runParams.dataDir, sessionId, {
10
+ role: "user",
11
+ content: transcriptMessage,
12
+ timestamp: new Date().toISOString(),
13
+ });
14
+ }
15
+ if (compactionEntry) {
16
+ await appendTranscriptEntry(runParams.dataDir, sessionId, compactionEntry);
17
+ }
18
+ await appendTranscriptEntry(runParams.dataDir, sessionId, {
19
+ role: "assistant",
20
+ content: replyText,
21
+ timestamp: new Date().toISOString(),
22
+ });
23
+ if (isNewSession) {
24
+ const titleSource = transcriptMessage.trim() ? transcriptMessage : "New session";
25
+ await saveSessionMetadata(runParams.dataDir, buildNewSessionMetadata({
26
+ sessionId,
27
+ title: generateSessionTitle(titleSource),
28
+ channel: runParams.channel,
29
+ }));
30
+ }
31
+ const durationMs = Date.now() - startTime;
32
+ const usage = { input: 0, output: 0, total: 0 };
33
+ const result = {
34
+ sessionId,
35
+ text: replyText,
36
+ usage,
37
+ durationMs,
38
+ };
39
+ await finishSessionLifecycle({
40
+ sessionId,
41
+ result,
42
+ runParams,
43
+ hookRegistry,
44
+ hookContext,
45
+ eventDispatcher,
46
+ });
47
+ return result;
48
+ }
49
+ export async function finalizeCompletedRun(params) {
50
+ const { sessionId, isNewSession, transcriptMessage, runParams, hookRegistry, hookContext, startTime, text, usage, error, eventDispatcher, } = params;
51
+ if (isNewSession) {
52
+ await saveSessionMetadata(runParams.dataDir, buildNewSessionMetadata({
53
+ sessionId,
54
+ title: generateSessionTitle(transcriptMessage),
55
+ channel: runParams.channel,
56
+ }));
57
+ }
58
+ const result = {
59
+ sessionId,
60
+ text,
61
+ usage,
62
+ durationMs: Date.now() - startTime,
63
+ error,
64
+ };
65
+ await finishSessionLifecycle({
66
+ sessionId,
67
+ result,
68
+ runParams,
69
+ hookRegistry,
70
+ hookContext,
71
+ eventDispatcher,
72
+ });
73
+ return result;
74
+ }
75
+ //# sourceMappingURL=finalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finalizer.js","sourceRoot":"","sources":["../../src/runner/finalizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { Message } from "@mariozechner/pi-ai";
2
+ import type { Skill } from "../skills/skills.js";
3
+ import type { AgentRunParams, AgentRunResult } from "../types.js";
4
+ import type { PluginHookRegistry } from "../plugins/hooks.js";
5
+ import { RunEventDispatcher } from "./event-dispatcher.js";
6
+ export type PreparedInvocation = {
7
+ inputMode: "text" | "messages";
8
+ rawMessage?: string;
9
+ promptInput: string | Message[];
10
+ transcriptMessage: string;
11
+ slashCommandSource?: string;
12
+ messageForRun?: string;
13
+ requestedSessionId?: string;
14
+ previousSessionId?: string;
15
+ resetCommand?: {
16
+ action: "new" | "reset";
17
+ remainder: string;
18
+ };
19
+ resetShortCircuit: boolean;
20
+ };
21
+ export type ResolvedSlashInvocation = {
22
+ kind: "run";
23
+ effectivePrompt: string | Message[];
24
+ transcriptMessage: string;
25
+ } | {
26
+ kind: "reply";
27
+ replyText: string;
28
+ transcriptMessage: string;
29
+ initialUserEntryPersisted?: boolean;
30
+ } | {
31
+ kind: "compact";
32
+ transcriptMessage: string;
33
+ instructions?: string;
34
+ initialUserEntryPersisted?: boolean;
35
+ } | {
36
+ kind: "reset_reply";
37
+ action: "new" | "reset";
38
+ transcriptMessage: string;
39
+ initialUserEntryPersisted: true;
40
+ };
41
+ export type InvocationExecutionResult = {
42
+ kind: "continue";
43
+ effectivePrompt: string | Message[];
44
+ transcriptMessage: string;
45
+ } | {
46
+ kind: "completed";
47
+ result: AgentRunResult;
48
+ };
49
+ export declare function prepareInvocation(params: AgentRunParams): PreparedInvocation;
50
+ export declare function resolveSlashInvocation(invocation: PreparedInvocation, skills: Skill[]): ResolvedSlashInvocation;
51
+ export declare function handleInvocation(params: {
52
+ invocation: PreparedInvocation;
53
+ skills: Skill[];
54
+ sessionId: string;
55
+ isNewSession: boolean;
56
+ initialUserEntryPersisted: boolean;
57
+ runParams: AgentRunParams;
58
+ hookRegistry: PluginHookRegistry;
59
+ hookContext: {
60
+ sessionId?: string;
61
+ workspaceDir?: string;
62
+ channel?: AgentRunParams["channel"];
63
+ };
64
+ startTime: number;
65
+ eventDispatcher: RunEventDispatcher;
66
+ }): Promise<InvocationExecutionResult>;
67
+ //# sourceMappingURL=invocation-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invocation-resolver.d.ts","sourceRoot":"","sources":["../../src/runner/invocation-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAMnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAO3D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE;QACb,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,iBAAiB,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAC/B;IACE,IAAI,EAAE,KAAK,CAAC;IACZ,eAAe,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC;IACpC,iBAAiB,EAAE,MAAM,CAAC;CAC3B,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC,GACD;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,yBAAyB,EAAE,IAAI,CAAC;CACjC,CAAC;AAEN,MAAM,MAAM,yBAAyB,GACjC;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC;IACpC,iBAAiB,EAAE,MAAM,CAAC;CAC3B,GACD;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;CACxB,CAAC;AAEN,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,kBAAkB,CAiC5E;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,kBAAkB,EAC9B,MAAM,EAAE,KAAK,EAAE,GACd,uBAAuB,CAsDzB;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE;IAC7C,UAAU,EAAE,kBAAkB,CAAC;IAC/B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,yBAAyB,EAAE,OAAO,CAAC;IACnC,SAAS,EAAE,cAAc,CAAC;IAC1B,YAAY,EAAE,kBAAkB,CAAC;IACjC,WAAW,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAA;KAAE,CAAC;IAChG,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,kBAAkB,CAAC;CACrC,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAoFrC"}