@promptbook/cli 0.104.0-2 → 0.104.0-3

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 (45) hide show
  1. package/apps/agents-server/package.json +3 -4
  2. package/apps/agents-server/public/swagger.json +115 -0
  3. package/apps/agents-server/scripts/generate-reserved-paths/generate-reserved-paths.ts +11 -7
  4. package/apps/agents-server/src/app/AddAgentButton.tsx +1 -2
  5. package/apps/agents-server/src/app/admin/chat-feedback/ChatFeedbackClient.tsx +221 -274
  6. package/apps/agents-server/src/app/admin/chat-history/ChatHistoryClient.tsx +94 -137
  7. package/apps/agents-server/src/app/admin/metadata/MetadataClient.tsx +8 -8
  8. package/apps/agents-server/src/app/agents/[agentName]/AgentChatWrapper.tsx +15 -1
  9. package/apps/agents-server/src/app/agents/[agentName]/AgentOptionsMenu.tsx +1 -3
  10. package/apps/agents-server/src/app/agents/[agentName]/AgentProfileChat.tsx +29 -16
  11. package/apps/agents-server/src/app/agents/[agentName]/api/chat/route.ts +3 -0
  12. package/apps/agents-server/src/app/agents/[agentName]/api/mcp/route.ts +6 -11
  13. package/apps/agents-server/src/app/agents/[agentName]/api/voice/route.ts +4 -1
  14. package/apps/agents-server/src/app/agents/[agentName]/code/api/route.ts +8 -6
  15. package/apps/agents-server/src/app/agents/[agentName]/code/page.tsx +33 -30
  16. package/apps/agents-server/src/app/api/agents/[agentName]/clone/route.ts +10 -12
  17. package/apps/agents-server/src/app/api/agents/[agentName]/route.ts +1 -2
  18. package/apps/agents-server/src/app/api/agents/route.ts +1 -1
  19. package/apps/agents-server/src/app/api/api-tokens/route.ts +6 -7
  20. package/apps/agents-server/src/app/api/docs/book.md/route.ts +3 -0
  21. package/apps/agents-server/src/app/api/metadata/route.ts +5 -6
  22. package/apps/agents-server/src/app/api/upload/route.ts +9 -0
  23. package/apps/agents-server/src/app/page.tsx +1 -1
  24. package/apps/agents-server/src/app/swagger/page.tsx +14 -0
  25. package/apps/agents-server/src/components/AgentProfile/AgentProfile.tsx +4 -2
  26. package/apps/agents-server/src/components/AgentProfile/QrCodeModal.tsx +0 -1
  27. package/apps/agents-server/src/components/Auth/AuthControls.tsx +5 -4
  28. package/apps/agents-server/src/components/Header/Header.tsx +27 -5
  29. package/apps/agents-server/src/components/Homepage/AgentCard.tsx +22 -3
  30. package/apps/agents-server/src/components/_utils/headlessParam.tsx +7 -3
  31. package/apps/agents-server/src/generated/reservedPaths.ts +6 -1
  32. package/apps/agents-server/src/middleware.ts +12 -3
  33. package/apps/agents-server/src/utils/auth.ts +117 -17
  34. package/apps/agents-server/src/utils/getUserIdFromRequest.ts +3 -1
  35. package/apps/agents-server/src/utils/handleChatCompletion.ts +9 -5
  36. package/apps/agents-server/src/utils/validateApiKey.ts +5 -10
  37. package/esm/index.es.js +55 -8
  38. package/esm/index.es.js.map +1 -1
  39. package/esm/typings/src/_packages/types.index.d.ts +2 -0
  40. package/esm/typings/src/book-components/Chat/types/ChatMessage.d.ts +7 -11
  41. package/esm/typings/src/types/Message.d.ts +49 -0
  42. package/esm/typings/src/version.d.ts +1 -1
  43. package/package.json +1 -1
  44. package/umd/index.umd.js +55 -8
  45. package/umd/index.umd.js.map +1 -1
@@ -185,6 +185,7 @@ import type { BookTranspiler } from '../transpilers/_common/BookTranspiler';
185
185
  import type { BookTranspilerOptions } from '../transpilers/_common/BookTranspilerOptions';
186
186
  import type { IntermediateFilesStrategy } from '../types/IntermediateFilesStrategy';
187
187
  import type { LlmCall } from '../types/LlmCall';
188
+ import type { Message } from '../types/Message';
188
189
  import type { ModelRequirements } from '../types/ModelRequirements';
189
190
  import type { CompletionModelRequirements } from '../types/ModelRequirements';
190
191
  import type { ChatModelRequirements } from '../types/ModelRequirements';
@@ -551,6 +552,7 @@ export type { BookTranspiler };
551
552
  export type { BookTranspilerOptions };
552
553
  export type { IntermediateFilesStrategy };
553
554
  export type { LlmCall };
555
+ export type { Message };
554
556
  export type { ModelRequirements };
555
557
  export type { CompletionModelRequirements };
556
558
  export type { ChatModelRequirements };
@@ -1,22 +1,17 @@
1
+ import { Message } from '../../../types/Message';
1
2
  import type { id, string_markdown } from '../../../types/typeAliases';
2
3
  /**
3
4
  * A message in the chat
4
5
  *
5
6
  * @public exported from `@promptbook/components`
6
7
  */
7
- export type ChatMessage = {
8
+ export type ChatMessage = Omit<Message<id>, 'direction' | 'recipients' | 'threadId' | 'metadata'> & {
8
9
  /**
9
- * Unique identifier of the message
10
- */
11
- id?: id;
12
- /**
13
- * Date when the message was created
14
- */
15
- date?: Date;
16
- /**
17
- * The name of the participant who sent the message
10
+ * Force the channel to be 'PROMPTBOOK_CHAT'
11
+ *
12
+ * @default 'PROMPTBOOK_CHAT'
18
13
  */
19
- from: id;
14
+ channel?: 'PROMPTBOOK_CHAT';
20
15
  /**
21
16
  * The content of the message with optional markdown formatting
22
17
  */
@@ -37,6 +32,7 @@ export type ChatMessage = {
37
32
  isVoiceCall?: boolean;
38
33
  };
39
34
  /**
35
+ * TODO: Make all fields readonly
40
36
  * TODO: Delete `expectedAnswer` from ChatMessage
41
37
  * TODO: Rename `date` into `created`+`modified`
42
38
  */
@@ -0,0 +1,49 @@
1
+ import { Arrayable } from 'type-fest';
2
+ import { really_any } from '../_packages/types.index';
3
+ import { id, string_date_iso8601, string_markdown } from './typeAliases';
4
+ /**
5
+ * A generic message structure for various communication channels
6
+ */
7
+ export type Message<TParticipant> = {
8
+ /**
9
+ * Unique identifier of the message
10
+ */
11
+ readonly id?: id;
12
+ /**
13
+ * Date when the message was created
14
+ */
15
+ readonly createdAt?: Date | string_date_iso8601;
16
+ /**
17
+ * The communication channel of the message
18
+ */
19
+ readonly channel?: 'PROMPTBOOK_CHAT' | 'EMAIL' | 'SMS' | 'WHATSAPP' | 'TELEGRAM' | 'SIGNAL' | string | 'UNKNOWN';
20
+ /**
21
+ * Is the message send from the Promptbook or to the Promptbook
22
+ */
23
+ readonly direction?: 'INBOUND' | 'OUTBOUND' | 'INTERNAL' | 'INITIAL';
24
+ /**
25
+ * Who sent the message
26
+ */
27
+ readonly sender: TParticipant;
28
+ /**
29
+ * Who are the recipients of the message
30
+ */
31
+ readonly recipients?: Readonly<Arrayable<TParticipant>>;
32
+ /**
33
+ * The content of the message as markdown
34
+ *
35
+ * Note: We are converting all message content to markdown for consistency
36
+ */
37
+ readonly content: string_markdown;
38
+ /**
39
+ * The thread identifier the message belongs to
40
+ *
41
+ * - `null` means the message is not part of any thread
42
+ * - `undefined` means that we don't know if the message is part of a thread or not
43
+ */
44
+ readonly threadId?: id | null;
45
+ /**
46
+ * Arbitrary metadata associated with the message
47
+ */
48
+ readonly metadata?: Readonly<Record<string, really_any>>;
49
+ };
@@ -15,7 +15,7 @@ export declare const BOOK_LANGUAGE_VERSION: string_semantic_version;
15
15
  export declare const PROMPTBOOK_ENGINE_VERSION: string_promptbook_version;
16
16
  /**
17
17
  * Represents the version string of the Promptbook engine.
18
- * It follows semantic versioning (e.g., `0.104.0-1`).
18
+ * It follows semantic versioning (e.g., `0.104.0-2`).
19
19
  *
20
20
  * @generated
21
21
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/cli",
3
- "version": "0.104.0-2",
3
+ "version": "0.104.0-3",
4
4
  "description": "Promptbook: Turn your company's scattered knowledge into AI ready books",
5
5
  "private": false,
6
6
  "sideEffects": false,
package/umd/index.umd.js CHANGED
@@ -56,7 +56,7 @@
56
56
  * @generated
57
57
  * @see https://github.com/webgptorg/promptbook
58
58
  */
59
- const PROMPTBOOK_ENGINE_VERSION = '0.104.0-2';
59
+ const PROMPTBOOK_ENGINE_VERSION = '0.104.0-3';
60
60
  /**
61
61
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
62
62
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -19457,7 +19457,7 @@
19457
19457
  let threadMessages = [];
19458
19458
  if ('thread' in prompt && Array.isArray(prompt.thread)) {
19459
19459
  threadMessages = prompt.thread.map((msg) => ({
19460
- role: msg.role === 'assistant' ? 'assistant' : 'user',
19460
+ role: msg.sender === 'assistant' ? 'assistant' : 'user',
19461
19461
  content: msg.content,
19462
19462
  }));
19463
19463
  }
@@ -26123,17 +26123,64 @@
26123
26123
  };
26124
26124
  }
26125
26125
  const lines = agentSource.split('\n');
26126
- const agentName = (((_a = lines[0]) === null || _a === void 0 ? void 0 : _a.trim()) || null);
26126
+ let agentName = null;
26127
+ let agentNameLineIndex = -1;
26128
+ // Find the agent name: first non-empty line that is not a commitment and not a horizontal line
26129
+ for (let i = 0; i < lines.length; i++) {
26130
+ const line = lines[i];
26131
+ if (line === undefined) {
26132
+ continue;
26133
+ }
26134
+ const trimmed = line.trim();
26135
+ if (!trimmed) {
26136
+ continue;
26137
+ }
26138
+ const isHorizontal = HORIZONTAL_LINE_PATTERN.test(line);
26139
+ if (isHorizontal) {
26140
+ continue;
26141
+ }
26142
+ let isCommitment = false;
26143
+ for (const definition of COMMITMENT_REGISTRY) {
26144
+ const typeRegex = definition.createTypeRegex();
26145
+ const match = typeRegex.exec(trimmed);
26146
+ if (match && ((_a = match.groups) === null || _a === void 0 ? void 0 : _a.type)) {
26147
+ isCommitment = true;
26148
+ break;
26149
+ }
26150
+ }
26151
+ if (!isCommitment) {
26152
+ agentName = trimmed;
26153
+ agentNameLineIndex = i;
26154
+ break;
26155
+ }
26156
+ }
26127
26157
  const commitments = [];
26128
26158
  const nonCommitmentLines = [];
26129
- // Always add the first line (agent name) to non-commitment lines
26130
- if (lines[0] !== undefined) {
26131
- nonCommitmentLines.push(lines[0]);
26159
+ // Add lines before agentName that are horizontal lines (they are non-commitment)
26160
+ for (let i = 0; i < agentNameLineIndex; i++) {
26161
+ const line = lines[i];
26162
+ if (line === undefined) {
26163
+ continue;
26164
+ }
26165
+ const trimmed = line.trim();
26166
+ if (!trimmed) {
26167
+ continue;
26168
+ }
26169
+ const isHorizontal = HORIZONTAL_LINE_PATTERN.test(line);
26170
+ if (isHorizontal) {
26171
+ nonCommitmentLines.push(line);
26172
+ }
26173
+ // Note: Commitments before agentName are not added to nonCommitmentLines
26174
+ }
26175
+ // Add the agent name line to non-commitment lines
26176
+ if (agentNameLineIndex >= 0) {
26177
+ nonCommitmentLines.push(lines[agentNameLineIndex]);
26132
26178
  }
26133
26179
  // Parse commitments with multiline support
26134
26180
  let currentCommitment = null;
26135
- // Process lines starting from the second line (skip agent name)
26136
- for (let i = 1; i < lines.length; i++) {
26181
+ // Process lines starting from after the agent name line
26182
+ const startIndex = agentNameLineIndex >= 0 ? agentNameLineIndex + 1 : 0;
26183
+ for (let i = startIndex; i < lines.length; i++) {
26137
26184
  const line = lines[i];
26138
26185
  if (line === undefined) {
26139
26186
  continue;