@springbrand/agent-runtime 0.1.0

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 (75) hide show
  1. package/package.json +28 -0
  2. package/src/db/approval.repo.ts +291 -0
  3. package/src/db/ext-context.repo.ts +34 -0
  4. package/src/db/index.ts +83 -0
  5. package/src/db/message-ui.repo.ts +39 -0
  6. package/src/db/milestone.repo.ts +96 -0
  7. package/src/db/runtime-event-outbox.repo.ts +89 -0
  8. package/src/db/schema.ts +164 -0
  9. package/src/db/settlement.repo.ts +104 -0
  10. package/src/db/steer.repo.ts +73 -0
  11. package/src/db/submission.repo.ts +323 -0
  12. package/src/index.ts +133 -0
  13. package/src/kernel/approval-lifecycle.ts +552 -0
  14. package/src/kernel/bindings.ts +898 -0
  15. package/src/kernel/degradation.ts +15 -0
  16. package/src/kernel/extensions.ts +108 -0
  17. package/src/kernel/profile.ts +116 -0
  18. package/src/kernel/public-contracts.ts +17 -0
  19. package/src/kernel/receipts.ts +124 -0
  20. package/src/kernel/recoverable-chat-agent.ts +899 -0
  21. package/src/kernel/state.ts +76 -0
  22. package/src/kernel/submission-lifecycle.ts +600 -0
  23. package/src/layers/context/budget/gate.ts +88 -0
  24. package/src/layers/orchestration/subagents/agent-types/contract.ts +78 -0
  25. package/src/layers/orchestration/subagents/agent-types/extract/index.ts +47 -0
  26. package/src/layers/orchestration/subagents/agent-types/fanout/index.ts +53 -0
  27. package/src/layers/orchestration/subagents/agent-types/registry.ts +16 -0
  28. package/src/layers/orchestration/temporary-agent/core.ts +152 -0
  29. package/src/layers/orchestration/temporary-agent/runner.ts +133 -0
  30. package/src/layers/orchestration/temporary-agent/workspace.ts +154 -0
  31. package/src/lib/artifacts.ts +54 -0
  32. package/src/lib/egress.ts +44 -0
  33. package/src/lib/execution-level.ts +27 -0
  34. package/src/lib/extension-name.ts +18 -0
  35. package/src/lib/host-actions.ts +57 -0
  36. package/src/lib/mcp.ts +86 -0
  37. package/src/lib/model-catalog.ts +7 -0
  38. package/src/lib/prompt.ts +139 -0
  39. package/src/lib/telemetry-dev.ts +44 -0
  40. package/src/pi/assembly/context.ts +510 -0
  41. package/src/pi/assembly/extensions.ts +661 -0
  42. package/src/pi/assembly/index.ts +19 -0
  43. package/src/pi/assembly/snapshot.ts +200 -0
  44. package/src/pi/message/contract.ts +8 -0
  45. package/src/pi/message/conversion.ts +73 -0
  46. package/src/pi/message/index.ts +3 -0
  47. package/src/pi/message/projection.ts +604 -0
  48. package/src/pi/runtime-adapter/assembly.ts +552 -0
  49. package/src/pi/runtime-adapter/execution.ts +683 -0
  50. package/src/pi/runtime-adapter/index.ts +232 -0
  51. package/src/pi/runtime-adapter/models.ts +243 -0
  52. package/src/pi/runtime-adapter/recovery.ts +805 -0
  53. package/src/pi/runtime-adapter/transcript.ts +825 -0
  54. package/src/pi/session/index.ts +24 -0
  55. package/src/pi/session/storage.ts +353 -0
  56. package/src/pi/tool/ai-adapter.ts +100 -0
  57. package/src/pi/tool/base.ts +110 -0
  58. package/src/pi/tool/compiler.ts +444 -0
  59. package/src/pi/tool/core-host.ts +48 -0
  60. package/src/pi/tool/core.ts +251 -0
  61. package/src/pi/tool/index.ts +32 -0
  62. package/src/pi/tool/mcp.ts +319 -0
  63. package/src/pi/tool/schedule.ts +198 -0
  64. package/src/pi/tool/skill.ts +455 -0
  65. package/src/pi/tool/subagent.ts +148 -0
  66. package/src/pi/tool/web-search/api.ts +1292 -0
  67. package/src/pi/tool/web-search/index.ts +2 -0
  68. package/src/pi/tool/web-search/web-search.ts +127 -0
  69. package/src/pi/tool/workspace-sandbox.ts +664 -0
  70. package/src/pi/turn/approval.ts +181 -0
  71. package/src/pi/turn/index.ts +62 -0
  72. package/src/pi/turn/tool-recovery.ts +792 -0
  73. package/src/plugins.ts +1024 -0
  74. package/src/runtime-agent.ts +654 -0
  75. package/src/runtime.ts +2880 -0
@@ -0,0 +1,2 @@
1
+ export * from "./api";
2
+ export * from "./web-search";
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Adapted from ttttmr/pi-web-search at commit
3
+ * 118b3eee3f5900cef3141745109a300315630592.
4
+ * Copyright (c) ttttmr. Licensed under the MIT license.
5
+ * https://github.com/ttttmr/pi-web-search
6
+ */
7
+
8
+ import type { AgentTool } from "@earendil-works/pi-agent-core";
9
+ import { Type } from "@earendil-works/pi-ai";
10
+ import type { PiToolCandidate } from "../compiler";
11
+ import type { WebSearch, WebSearchResult } from "./api";
12
+
13
+ export const webSearchParameters = Type.Object({
14
+ query: Type.String({
15
+ description: "The search query or question to answer",
16
+ }),
17
+ urls: Type.Optional(Type.Array(Type.String(), {
18
+ description: "Additional URLs to analyze along with search (up to 20)",
19
+ maxItems: 20,
20
+ })),
21
+ });
22
+
23
+ export interface WebSearchDetails extends Omit<WebSearchResult, "text"> {
24
+ resultCount: number;
25
+ }
26
+
27
+ function progress(
28
+ onUpdate: Parameters<
29
+ AgentTool<typeof webSearchParameters, WebSearchDetails>["execute"]
30
+ >[3],
31
+ text: string,
32
+ ): void {
33
+ onUpdate?.({
34
+ content: [{ type: "text", text }],
35
+ details: {} as WebSearchDetails,
36
+ });
37
+ }
38
+
39
+ export function webSearchPiToolCandidate(
40
+ search: WebSearch,
41
+ ): PiToolCandidate {
42
+ const tool: AgentTool<typeof webSearchParameters, WebSearchDetails> = {
43
+ name: "web_search",
44
+ label: "Web search",
45
+ description:
46
+ "Primary tool for web discovery, current facts, cited research, and public URL analysis using the current model provider. " +
47
+ "Make the first query answer-oriented: preserve the user's distinguishing terms and the evidence being sought. " +
48
+ "When a relevant URL is already known, include it in urls instead of fetching it separately unless raw HTTP access is required. " +
49
+ "Optionally include up to 20 URLs.",
50
+ parameters: webSearchParameters,
51
+ async execute(_toolCallId, input, signal, onUpdate) {
52
+ const hasUrls = Boolean(input.urls?.length);
53
+ progress(
54
+ onUpdate,
55
+ hasUrls
56
+ ? `Searching and analyzing ${input.urls!.length} URL(s)...`
57
+ : `Searching for "${input.query}"...`,
58
+ );
59
+ const result = await search(input, {
60
+ signal,
61
+ onProgress: (text) => progress(onUpdate, text),
62
+ });
63
+ const additionalResults = (result.searchResults ?? []).filter(
64
+ (item) =>
65
+ item.url &&
66
+ !result.sources.some((source) => source.url === item.url),
67
+ );
68
+ let summary = result.text;
69
+
70
+ if (result.failed?.length) {
71
+ summary +=
72
+ `\n\n## URL Status\n✅ Retrieved: ${result.retrieved?.length ?? 0}` +
73
+ `\n❌ Failed: ${result.failed.length}`;
74
+ for (const failure of result.failed) {
75
+ summary += `\n- ${failure.url ?? "Unknown URL"}: ${failure.status ?? "failed"}`;
76
+ }
77
+ }
78
+ if (result.sources.length) {
79
+ summary += `\n\n## Sources\n${result.sources.map(
80
+ (source, index) =>
81
+ `${index + 1}. [${source.title}](${source.url})`,
82
+ ).join("\n")}`;
83
+ }
84
+ if (additionalResults.length) {
85
+ const visible = additionalResults.slice(0, 8);
86
+ summary += `\n\n## Additional Search Results\n${visible.map(
87
+ (item, index) => {
88
+ const label = item.title || item.url || `Result ${index + 1}`;
89
+ const url = item.url ? ` - ${item.url}` : "";
90
+ const metadata = [
91
+ item.source,
92
+ item.type,
93
+ item.status,
94
+ item.query ? `query=${item.query}` : undefined,
95
+ ].filter(Boolean).join(", ");
96
+ return `${index + 1}. ${label}${url}${
97
+ metadata ? ` (${metadata})` : ""
98
+ }`;
99
+ },
100
+ ).join("\n")}`;
101
+ if (additionalResults.length > visible.length) {
102
+ summary += `\n... and ${
103
+ additionalResults.length - visible.length
104
+ } more results in tool details.`;
105
+ }
106
+ }
107
+
108
+ const { text: _text, ...standardized } = result;
109
+ const details: WebSearchDetails = {
110
+ ...standardized,
111
+ resultCount:
112
+ result.searchResults?.length || result.sources.length,
113
+ };
114
+ return {
115
+ content: [{ type: "text", text: summary }],
116
+ details,
117
+ };
118
+ },
119
+ };
120
+ return {
121
+ owner: "runtime-base",
122
+ authorized: true,
123
+ requiredExecutionLevel: "safe",
124
+ source: "action",
125
+ tool,
126
+ };
127
+ }