@promptbook/cli 0.112.0-134 → 0.112.0-136

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 (94) hide show
  1. package/apps/agents-server/README.md +0 -1
  2. package/apps/agents-server/src/app/admin/chat-feedback/page.tsx +2 -4
  3. package/apps/agents-server/src/app/admin/chat-history/page.tsx +2 -4
  4. package/apps/agents-server/src/app/admin/metadata/MetadataClient.tsx +246 -15
  5. package/apps/agents-server/src/app/admin/update/UpdateClient.tsx +237 -4
  6. package/apps/agents-server/src/app/api/admin/update/log/route.ts +42 -0
  7. package/apps/agents-server/src/app/api/agents/[agentName]/route.ts +28 -9
  8. package/apps/agents-server/src/app/api/agents/export/route.ts +41 -0
  9. package/apps/agents-server/src/app/api/agents/import/route.ts +168 -0
  10. package/apps/agents-server/src/app/api/chat/route.ts +29 -7
  11. package/apps/agents-server/src/app/api/chat-feedback/export/route.ts +2 -2
  12. package/apps/agents-server/src/app/api/chat-feedback/route.ts +3 -3
  13. package/apps/agents-server/src/app/api/chat-history/[id]/route.ts +2 -2
  14. package/apps/agents-server/src/app/api/chat-history/export/route.ts +2 -2
  15. package/apps/agents-server/src/app/api/chat-history/route.ts +3 -3
  16. package/apps/agents-server/src/app/api/chat-streaming/route.ts +29 -0
  17. package/apps/agents-server/src/app/api/elevenlabs/tts/route.ts +60 -2
  18. package/apps/agents-server/src/app/api/federated-agents/route.ts +1 -1
  19. package/apps/agents-server/src/app/api/images/[filename]/route.ts +102 -0
  20. package/apps/agents-server/src/app/api/metadata/export/route.ts +34 -0
  21. package/apps/agents-server/src/app/api/metadata/import/route.ts +46 -0
  22. package/apps/agents-server/src/app/api/openai/v1/audio/transcriptions/route.ts +111 -2
  23. package/apps/agents-server/src/app/api/page-preview/check/route.ts +18 -0
  24. package/apps/agents-server/src/app/api/page-preview/screenshot/route.ts +15 -8
  25. package/apps/agents-server/src/app/api/team-agent-profile/route.ts +20 -0
  26. package/apps/agents-server/src/app/layout.tsx +1 -1
  27. package/apps/agents-server/src/components/AgentContextMenu/useAgentContextMenuItems.ts +27 -19
  28. package/apps/agents-server/src/components/Homepage/AgentsList.tsx +31 -1
  29. package/apps/agents-server/src/components/Homepage/AgentsListHeader.tsx +60 -1
  30. package/apps/agents-server/src/components/Homepage/useAgentsListImportExportState.ts +523 -0
  31. package/apps/agents-server/src/components/Homepage/useAgentsListState.ts +16 -0
  32. package/apps/agents-server/src/constants/defaultAgentAvatarVisual.ts +1 -1
  33. package/apps/agents-server/src/database/metadataDefaults.ts +0 -21
  34. package/apps/agents-server/src/database/migrations/2026-06-2700-default-agent-avatar-visual-octopus3d4.sql +16 -0
  35. package/apps/agents-server/src/database/seedCoreAgents.ts +235 -0
  36. package/apps/agents-server/src/database/seedDefaultAgents.ts +32 -1
  37. package/apps/agents-server/src/search/createDefaultServerSearchProviders/createFederatedAgentsSearchProvider.ts +1 -1
  38. package/apps/agents-server/src/tools/$provideAgentCollectionForServer.ts +2 -9
  39. package/apps/agents-server/src/utils/agentOwnership.ts +54 -5
  40. package/apps/agents-server/src/utils/agentsTransfer/createAgentsExportZipStream.ts +68 -0
  41. package/apps/agents-server/src/utils/agentsTransfer/importAgentsFromFiles.ts +852 -0
  42. package/apps/agents-server/src/utils/backup/createBooksBackupZipStream.ts +15 -2
  43. package/apps/agents-server/src/utils/defaultAgents/loadDefaultAgentBooks.ts +46 -4
  44. package/apps/agents-server/src/utils/findAgentForCallerWriteAccess.ts +36 -0
  45. package/apps/agents-server/src/utils/getFederatedServers.ts +3 -74
  46. package/apps/agents-server/src/utils/getWellKnownAgentUrl.ts +10 -4
  47. package/apps/agents-server/src/utils/metadataConfigurationTransfer.ts +426 -0
  48. package/apps/agents-server/src/utils/paidApiRequestGuard.ts +241 -0
  49. package/apps/agents-server/src/utils/serverManagement/createManagedServer/bootstrapManagedServer.ts +2 -5
  50. package/apps/agents-server/src/utils/serverManagement/createManagedServer/seedServerCoreAgents.ts +162 -0
  51. package/apps/agents-server/src/utils/userChat/createRunUserChatJobExecutionContext.ts +36 -8
  52. package/apps/agents-server/src/utils/userChat/persistUserChatJobProgressCard.ts +11 -2
  53. package/apps/agents-server/src/utils/userChat/resolveUserChatProgressToolHighlights.ts +100 -0
  54. package/apps/agents-server/src/utils/userChat/runUserChatJob.ts +4 -3
  55. package/apps/agents-server/src/utils/userChat/userChatProgressCard.ts +272 -27
  56. package/apps/agents-server/src/utils/validateApiKey.ts +7 -3
  57. package/apps/agents-server/src/utils/vpsSelfUpdate.ts +110 -0
  58. package/esm/index.es.js +795 -39
  59. package/esm/index.es.js.map +1 -1
  60. package/esm/src/_packages/core.index.d.ts +0 -2
  61. package/esm/src/avatars/types/AvatarVisualDefinition.d.ts +1 -1
  62. package/esm/src/avatars/visuals/octopus3d4AvatarVisual.d.ts +7 -0
  63. package/esm/src/utils/validators/url/isValidAgentUrl.d.ts +5 -0
  64. package/esm/src/version.d.ts +1 -1
  65. package/package.json +1 -1
  66. package/servers.ts +1 -16
  67. package/src/_packages/core.index.ts +0 -2
  68. package/src/avatars/types/AvatarVisualDefinition.ts +1 -0
  69. package/src/avatars/visuals/avatarVisualRegistry.ts +2 -0
  70. package/src/avatars/visuals/octopus3d4AvatarVisual.ts +1295 -0
  71. package/src/other/templates/getTemplatesPipelineCollection.ts +762 -883
  72. package/src/utils/agents/resolveAgentAvatarImageUrl.ts +1 -1
  73. package/src/utils/validators/url/isValidAgentUrl.ts +5 -7
  74. package/src/version.ts +2 -2
  75. package/src/versions.txt +2 -1
  76. package/umd/index.umd.js +795 -39
  77. package/umd/index.umd.js.map +1 -1
  78. package/umd/src/_packages/core.index.d.ts +0 -2
  79. package/umd/src/avatars/types/AvatarVisualDefinition.d.ts +1 -1
  80. package/umd/src/avatars/visuals/octopus3d4AvatarVisual.d.ts +7 -0
  81. package/umd/src/utils/validators/url/isValidAgentUrl.d.ts +5 -0
  82. package/umd/src/version.d.ts +1 -1
  83. package/apps/agents-server/src/utils/defaultFederatedAgents/DefaultFederatedAgentsSyncOptions.ts +0 -9
  84. package/apps/agents-server/src/utils/defaultFederatedAgents/ensureDefaultFederatedAgentExists.ts +0 -277
  85. package/apps/agents-server/src/utils/defaultFederatedAgents/fetchCoreOrganizationPayload.ts +0 -39
  86. package/apps/agents-server/src/utils/defaultFederatedAgents/fetchFederatedAgentBook.ts +0 -43
  87. package/apps/agents-server/src/utils/defaultFederatedAgents/fetchWithDefaultFederatedAgentTimeout.ts +0 -28
  88. package/apps/agents-server/src/utils/defaultFederatedAgents/getDefaultFederatedAgentSyncPool.ts +0 -38
  89. package/apps/agents-server/src/utils/defaultFederatedAgents/loadActiveLocalAgentIdsByNormalizedName.ts +0 -41
  90. package/apps/agents-server/src/utils/defaultFederatedAgents/loadDefaultFederatedAgentSyncMetadata.ts +0 -76
  91. package/apps/agents-server/src/utils/defaultFederatedAgents/quoteIdentifier.ts +0 -11
  92. package/apps/agents-server/src/utils/defaultFederatedAgents/scheduleDefaultFederatedAgentsSync.ts +0 -88
  93. package/apps/agents-server/src/utils/defaultFederatedAgents/selectDefaultFederatedAgentsFromOrganizationPayload.ts +0 -181
  94. package/apps/agents-server/src/utils/defaultFederatedAgents/synchronizeDefaultFederatedAgents.ts +0 -77
@@ -1,88 +0,0 @@
1
- import type { DefaultFederatedAgentsSyncOptions } from './DefaultFederatedAgentsSyncOptions';
2
- import { synchronizeDefaultFederatedAgents } from './synchronizeDefaultFederatedAgents';
3
-
4
- /**
5
- * Interval between best-effort background sync attempts for one server prefix.
6
- */
7
- const DEFAULT_FEDERATED_AGENT_SYNC_INTERVAL_MS = 5 * 60_000;
8
-
9
- /**
10
- * In-memory scheduling state for one server prefix.
11
- */
12
- type DefaultFederatedAgentSyncState = {
13
- /**
14
- * Currently running sync promise, if any.
15
- */
16
- runningPromise: Promise<void> | null;
17
- /**
18
- * Timestamp of the most recent sync attempt.
19
- */
20
- lastAttemptAt: number | null;
21
- };
22
-
23
- /**
24
- * Active best-effort sync scheduling state keyed by server table prefix.
25
- */
26
- const defaultFederatedAgentSyncStateByTablePrefix = new Map<string, DefaultFederatedAgentSyncState>();
27
-
28
- /**
29
- * Schedules a best-effort background synchronization of default Core boilerplate agents.
30
- *
31
- * The task is throttled per server prefix and intentionally never throws to callers.
32
- *
33
- * @param options - Current server context needed for background sync.
34
- *
35
- * @private shared utility for Agents Server
36
- */
37
- export function scheduleDefaultFederatedAgentsSync(options: DefaultFederatedAgentsSyncOptions): void {
38
- if (shouldDisableDefaultFederatedAgentsSync()) {
39
- return;
40
- }
41
-
42
- const state = getDefaultFederatedAgentSyncState(options.tablePrefix);
43
- if (state.runningPromise) {
44
- return;
45
- }
46
-
47
- if (state.lastAttemptAt !== null && Date.now() - state.lastAttemptAt < DEFAULT_FEDERATED_AGENT_SYNC_INTERVAL_MS) {
48
- return;
49
- }
50
-
51
- state.lastAttemptAt = Date.now();
52
- state.runningPromise = synchronizeDefaultFederatedAgents(options)
53
- .catch((error) => {
54
- console.error('[default-federated-agents] Sync failed:', error);
55
- })
56
- .finally(() => {
57
- state.runningPromise = null;
58
- });
59
- }
60
-
61
- /**
62
- * Reads or creates the in-memory scheduling state for one server prefix.
63
- *
64
- * @param tablePrefix - Current server table prefix.
65
- * @returns Mutable scheduling state.
66
- */
67
- function getDefaultFederatedAgentSyncState(tablePrefix: string): DefaultFederatedAgentSyncState {
68
- let state = defaultFederatedAgentSyncStateByTablePrefix.get(tablePrefix);
69
-
70
- if (!state) {
71
- state = {
72
- runningPromise: null,
73
- lastAttemptAt: null,
74
- };
75
- defaultFederatedAgentSyncStateByTablePrefix.set(tablePrefix, state);
76
- }
77
-
78
- return state;
79
- }
80
-
81
- /**
82
- * Returns `true` when background sync should stay disabled in the current runtime.
83
- *
84
- * @returns Whether background sync should be skipped.
85
- */
86
- function shouldDisableDefaultFederatedAgentsSync(): boolean {
87
- return process.env.NODE_ENV === 'test' || typeof process.env.JEST_WORKER_ID !== 'undefined';
88
- }
@@ -1,181 +0,0 @@
1
- import { buildFolderTree, collectDescendantFolderIds } from '../agentOrganization/folderTree';
2
- import { normalizeAgentName } from '../../../../../src/book-2.0/agent-source/normalizeAgentName';
3
-
4
- /**
5
- * Normalized name of the Core folder that defines canonical boilerplate agents.
6
- */
7
- const DEFAULT_CORE_BOILERPLATE_FOLDER_NAME = 'default';
8
-
9
- /**
10
- * Minimal agent shape returned by the public organization snapshot.
11
- */
12
- export type FederatedOrganizationAgentSnapshot = {
13
- /**
14
- * Agent name shown by the remote server.
15
- */
16
- readonly agentName: string;
17
- /**
18
- * Stable remote permanent id, when available.
19
- */
20
- readonly permanentId?: string | null;
21
- /**
22
- * Public route URL of the remote agent, when provided by the source server.
23
- */
24
- readonly url?: string;
25
- /**
26
- * Folder placement on the remote server.
27
- */
28
- readonly folderId: number | null;
29
- };
30
-
31
- /**
32
- * Minimal folder shape returned by the public organization snapshot.
33
- */
34
- export type FederatedOrganizationFolderSnapshot = {
35
- /**
36
- * Folder identifier on the remote server.
37
- */
38
- readonly id: number;
39
- /**
40
- * Folder label.
41
- */
42
- readonly name: string;
43
- /**
44
- * Parent folder identifier, or `null` for root.
45
- */
46
- readonly parentId: number | null;
47
- };
48
-
49
- /**
50
- * Public organization payload shape consumed from Core.
51
- */
52
- export type FederatedOrganizationPayload = {
53
- /**
54
- * Whether the remote endpoint reported success.
55
- */
56
- readonly success?: boolean;
57
- /**
58
- * Public agents visible in the organization snapshot.
59
- */
60
- readonly agents?: ReadonlyArray<FederatedOrganizationAgentSnapshot>;
61
- /**
62
- * Public folders visible in the organization snapshot.
63
- */
64
- readonly folders?: ReadonlyArray<FederatedOrganizationFolderSnapshot>;
65
- };
66
-
67
- /**
68
- * Normalized remote default-agent candidate resolved from the Core organization snapshot.
69
- */
70
- export type DefaultFederatedAgentCandidate = {
71
- /**
72
- * Stable normalized name used for cross-server matching.
73
- */
74
- readonly normalizedName: string;
75
- /**
76
- * Human-readable name exposed by the Core server.
77
- */
78
- readonly sourceAgentName: string;
79
- /**
80
- * Remote canonical identifier (`permanentId` when available, otherwise `agentName`).
81
- */
82
- readonly sourceAgentIdentifier: string;
83
- /**
84
- * Remote canonical route URL of the agent.
85
- */
86
- readonly sourceAgentUrl: string;
87
- };
88
-
89
- /**
90
- * Selects agents that belong to the Core `default` folder subtree.
91
- *
92
- * The result is deduplicated by normalized name so matching stays stable across servers
93
- * even when the remote payload contains aliases or repeated entries.
94
- *
95
- * @param payload - Public organization payload fetched from Core.
96
- * @param coreServerUrl - Base URL of the Core server.
97
- * @returns Canonical default-agent candidates keyed by normalized name.
98
- */
99
- export function selectDefaultFederatedAgentsFromOrganizationPayload(
100
- payload: FederatedOrganizationPayload,
101
- coreServerUrl: string,
102
- ): Array<DefaultFederatedAgentCandidate> {
103
- const folders = Array.isArray(payload.folders) ? payload.folders : [];
104
- const agents = Array.isArray(payload.agents) ? payload.agents : [];
105
- const defaultFolderIds = resolveDefaultFolderIds(folders);
106
- const candidatesByNormalizedName = new Map<string, DefaultFederatedAgentCandidate>();
107
-
108
- for (const agent of agents) {
109
- if (agent.folderId === null || !defaultFolderIds.has(agent.folderId)) {
110
- continue;
111
- }
112
-
113
- const normalizedName = normalizeAgentName(agent.agentName);
114
- if (candidatesByNormalizedName.has(normalizedName)) {
115
- continue;
116
- }
117
-
118
- const sourceAgentIdentifier = agent.permanentId || agent.agentName;
119
- candidatesByNormalizedName.set(normalizedName, {
120
- normalizedName,
121
- sourceAgentName: agent.agentName,
122
- sourceAgentIdentifier,
123
- sourceAgentUrl: resolveFederatedAgentRouteUrl(coreServerUrl, sourceAgentIdentifier, agent.url),
124
- });
125
- }
126
-
127
- return Array.from(candidatesByNormalizedName.values());
128
- }
129
-
130
- /**
131
- * Resolves the full set of folder ids that belong to the remote `default` subtree.
132
- *
133
- * @param folders - Public folders exposed by the remote server.
134
- * @returns Folder ids of all matching `default` roots plus their descendants.
135
- */
136
- function resolveDefaultFolderIds(folders: ReadonlyArray<FederatedOrganizationFolderSnapshot>): Set<number> {
137
- const { childrenByParentId } = buildFolderTree([...folders]);
138
- const defaultFolderIds = new Set<number>();
139
-
140
- for (const folder of folders) {
141
- if (normalizeAgentName(folder.name) !== DEFAULT_CORE_BOILERPLATE_FOLDER_NAME) {
142
- continue;
143
- }
144
-
145
- for (const descendantId of collectDescendantFolderIds(folder.id, childrenByParentId)) {
146
- defaultFolderIds.add(descendantId);
147
- }
148
- }
149
-
150
- return defaultFolderIds;
151
- }
152
-
153
- /**
154
- * Builds a stable public route URL for one remote agent.
155
- *
156
- * @param coreServerUrl - Base URL of the Core server.
157
- * @param sourceAgentIdentifier - Canonical remote identifier.
158
- * @param sourceAgentUrl - Optional URL already provided by the remote payload.
159
- * @returns Absolute agent route URL.
160
- */
161
- function resolveFederatedAgentRouteUrl(
162
- coreServerUrl: string,
163
- sourceAgentIdentifier: string,
164
- sourceAgentUrl?: string,
165
- ): string {
166
- if (typeof sourceAgentUrl === 'string' && sourceAgentUrl.trim() !== '') {
167
- return sourceAgentUrl;
168
- }
169
-
170
- return new URL(`/agents/${encodeURIComponent(sourceAgentIdentifier)}`, ensureTrailingSlash(coreServerUrl)).href;
171
- }
172
-
173
- /**
174
- * Normalizes a server base URL so relative `URL` construction stays predictable.
175
- *
176
- * @param value - Raw base URL.
177
- * @returns Base URL with exactly one trailing slash.
178
- */
179
- function ensureTrailingSlash(value: string): string {
180
- return `${value.replace(/\/+$/g, '')}/`;
181
- }
@@ -1,77 +0,0 @@
1
- import type { DefaultFederatedAgentsSyncOptions } from './DefaultFederatedAgentsSyncOptions';
2
- import { ensureDefaultFederatedAgentExists } from './ensureDefaultFederatedAgentExists';
3
- import { fetchCoreOrganizationPayload } from './fetchCoreOrganizationPayload';
4
- import { fetchFederatedAgentBook } from './fetchFederatedAgentBook';
5
- import { getDefaultFederatedAgentSyncPool } from './getDefaultFederatedAgentSyncPool';
6
- import { loadActiveLocalAgentIdsByNormalizedName } from './loadActiveLocalAgentIdsByNormalizedName';
7
- import { loadDefaultFederatedAgentSyncMetadata } from './loadDefaultFederatedAgentSyncMetadata';
8
- import { selectDefaultFederatedAgentsFromOrganizationPayload } from './selectDefaultFederatedAgentsFromOrganizationPayload';
9
-
10
- /**
11
- * Runs one synchronization pass for the given server prefix.
12
- *
13
- * @param options - Current server context.
14
- *
15
- * @private internal utility of `scheduleDefaultFederatedAgentsSync`
16
- */
17
- export async function synchronizeDefaultFederatedAgents(
18
- options: DefaultFederatedAgentsSyncOptions,
19
- ): Promise<void> {
20
- const pool = getDefaultFederatedAgentSyncPool();
21
- const syncMetadata = await loadDefaultFederatedAgentSyncMetadata(pool, options.tablePrefix);
22
- const coreServerUrl = syncMetadata.coreServerUrl;
23
-
24
- if (!coreServerUrl) {
25
- return;
26
- }
27
-
28
- if (normalizeServerUrl(coreServerUrl) === normalizeServerUrl(options.localServerUrl)) {
29
- return;
30
- }
31
-
32
- const organizationPayload = await fetchCoreOrganizationPayload(coreServerUrl);
33
- const defaultAgentCandidates = selectDefaultFederatedAgentsFromOrganizationPayload(organizationPayload, coreServerUrl);
34
- if (defaultAgentCandidates.length === 0) {
35
- return;
36
- }
37
-
38
- const activeLocalAgentIdsByNormalizedName = await loadActiveLocalAgentIdsByNormalizedName(pool, options.tablePrefix);
39
-
40
- for (const candidate of defaultAgentCandidates) {
41
- if (activeLocalAgentIdsByNormalizedName.has(candidate.normalizedName)) {
42
- continue;
43
- }
44
-
45
- const remoteAgentSource = await fetchFederatedAgentBook(candidate.sourceAgentUrl);
46
- const createdAgentPermanentId = await ensureDefaultFederatedAgentExists({
47
- pool,
48
- tablePrefix: options.tablePrefix,
49
- defaultVisibility: syncMetadata.defaultVisibility,
50
- candidate,
51
- remoteAgentSource,
52
- });
53
-
54
- activeLocalAgentIdsByNormalizedName.set(candidate.normalizedName, createdAgentPermanentId);
55
- }
56
- }
57
-
58
- /**
59
- * Normalizes a server URL for equality checks.
60
- *
61
- * @param value - Raw server URL.
62
- * @returns Stable URL string without a trailing slash.
63
- */
64
- function normalizeServerUrl(value: string): string {
65
- const parsedUrl = new URL(ensureTrailingSlash(value));
66
- return parsedUrl.href.replace(/\/+$/g, '');
67
- }
68
-
69
- /**
70
- * Ensures a server base URL always ends with a single slash.
71
- *
72
- * @param value - Raw server URL.
73
- * @returns Base URL with one trailing slash.
74
- */
75
- function ensureTrailingSlash(value: string): string {
76
- return `${value.replace(/\/+$/g, '')}/`;
77
- }