@cmodjs/core 0.3.0 → 1.5.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 (280) hide show
  1. package/docs/commands.md +61 -10
  2. package/docs/dependencies.md +16 -14
  3. package/docs/hooks.md +64 -29
  4. package/docs/index.md +29 -25
  5. package/docs/install-steps.md +13 -9
  6. package/docs/jobs.md +59 -111
  7. package/docs/mod.md +227 -175
  8. package/docs/options.md +2 -2
  9. package/docs/permissions.md +27 -16
  10. package/docs/session.md +311 -0
  11. package/docs/state.md +11 -7
  12. package/docs/testing.md +68 -23
  13. package/docs/ui.md +116 -76
  14. package/jobs/check.d.ts.map +1 -1
  15. package/jobs/check.js +5 -2
  16. package/jobs/context.d.ts +7 -8
  17. package/jobs/context.d.ts.map +1 -1
  18. package/jobs/context.js +23 -73
  19. package/jobs/permissions/decide-permission.d.ts +5 -3
  20. package/jobs/permissions/decide-permission.d.ts.map +1 -1
  21. package/jobs/permissions/decide-permission.js +6 -4
  22. package/jobs/permissions/find-project-scope.d.ts +1 -1
  23. package/jobs/permissions/find-project-scope.d.ts.map +1 -1
  24. package/jobs/permissions/find-project-scope.js +8 -11
  25. package/jobs/permissions/match-target.d.ts +2 -2
  26. package/jobs/permissions/match-target.d.ts.map +1 -1
  27. package/jobs/permissions.d.ts +1 -1
  28. package/jobs/permissions.d.ts.map +1 -1
  29. package/jobs/permissions.js +6 -4
  30. package/jobs/program.d.ts.map +1 -1
  31. package/jobs/program.js +14 -4
  32. package/jobs/prompt.d.ts +4 -2
  33. package/jobs/prompt.d.ts.map +1 -1
  34. package/jobs/prompt.js +16 -15
  35. package/jobs/schedule.d.ts +2 -2
  36. package/jobs/schedule.d.ts.map +1 -1
  37. package/jobs/schedule.js +9 -9
  38. package/jobs/slash-command.d.ts +4 -4
  39. package/jobs/slash-command.d.ts.map +1 -1
  40. package/jobs/slash-command.js +14 -9
  41. package/jobs/status-line.d.ts +1 -11
  42. package/jobs/status-line.d.ts.map +1 -1
  43. package/jobs/status-line.js +8 -12
  44. package/jobs/tool.d.ts +2 -2
  45. package/jobs/tool.d.ts.map +1 -1
  46. package/jobs/tool.js +15 -9
  47. package/mod.d.ts +178 -75
  48. package/mod.d.ts.map +1 -1
  49. package/mod.js +127 -3
  50. package/options.d.ts +2 -2
  51. package/options.js +19 -19
  52. package/package.json +3 -3
  53. package/records.d.ts +13 -8
  54. package/records.d.ts.map +1 -1
  55. package/records.js +33 -17
  56. package/register.d.ts.map +1 -1
  57. package/register.js +34 -5
  58. package/runtime/announce.d.ts +18 -0
  59. package/runtime/announce.d.ts.map +1 -0
  60. package/runtime/announce.js +68 -0
  61. package/runtime/before.d.ts +32 -0
  62. package/runtime/before.d.ts.map +1 -0
  63. package/runtime/before.js +214 -0
  64. package/runtime/bound.d.ts +4 -0
  65. package/runtime/bound.d.ts.map +1 -0
  66. package/runtime/bound.js +9 -0
  67. package/runtime/claude.d.ts +4 -2
  68. package/runtime/claude.d.ts.map +1 -1
  69. package/runtime/conversations.d.ts +17 -0
  70. package/runtime/conversations.d.ts.map +1 -0
  71. package/runtime/conversations.js +563 -0
  72. package/runtime/deadline.d.ts +0 -1
  73. package/runtime/deadline.d.ts.map +1 -1
  74. package/runtime/deadline.js +1 -1
  75. package/runtime/dependencies.d.ts +2 -0
  76. package/runtime/dependencies.d.ts.map +1 -1
  77. package/runtime/dependencies.js +10 -1
  78. package/runtime/engine.d.ts +13 -0
  79. package/runtime/engine.d.ts.map +1 -0
  80. package/runtime/engine.js +10 -0
  81. package/runtime/grants.d.ts +4 -0
  82. package/runtime/grants.d.ts.map +1 -1
  83. package/runtime/grants.js +68 -31
  84. package/runtime/hooks.d.ts +5 -4
  85. package/runtime/hooks.d.ts.map +1 -1
  86. package/runtime/hooks.js +29 -9
  87. package/runtime/installer.d.ts +1 -1
  88. package/runtime/installer.d.ts.map +1 -1
  89. package/runtime/installer.js +17 -14
  90. package/runtime/lifecycle.d.ts +3 -1
  91. package/runtime/lifecycle.d.ts.map +1 -1
  92. package/runtime/lifecycle.js +414 -212
  93. package/runtime/metadata.d.ts +3 -1
  94. package/runtime/metadata.d.ts.map +1 -1
  95. package/runtime/metadata.js +25 -14
  96. package/runtime/options.d.ts +3 -1
  97. package/runtime/options.d.ts.map +1 -1
  98. package/runtime/options.js +4 -4
  99. package/runtime/programs.d.ts +8 -0
  100. package/runtime/programs.d.ts.map +1 -1
  101. package/runtime/programs.js +39 -1
  102. package/runtime/router.d.ts +2 -1
  103. package/runtime/router.d.ts.map +1 -1
  104. package/runtime/router.js +11 -3
  105. package/runtime/sessions.d.ts +58 -0
  106. package/runtime/sessions.d.ts.map +1 -0
  107. package/runtime/sessions.js +433 -0
  108. package/runtime/state.d.ts +6 -2
  109. package/runtime/state.d.ts.map +1 -1
  110. package/runtime/state.js +46 -13
  111. package/runtime/toaster.d.ts +24 -0
  112. package/runtime/toaster.d.ts.map +1 -0
  113. package/runtime/toaster.js +286 -0
  114. package/runtime/ui.d.ts +6 -17
  115. package/runtime/ui.d.ts.map +1 -1
  116. package/runtime/ui.js +62 -118
  117. package/session/context/context.d.ts +12 -0
  118. package/session/context/context.d.ts.map +1 -0
  119. package/session/context/context.js +2 -0
  120. package/session/context/turn/message/document.d.ts +7 -0
  121. package/session/context/turn/message/document.d.ts.map +1 -0
  122. package/session/context/turn/message/document.js +1 -0
  123. package/session/context/turn/message/message.d.ts +55 -0
  124. package/session/context/turn/message/message.d.ts.map +1 -0
  125. package/session/context/turn/message/message.js +178 -0
  126. package/session/context/turn/message/note.d.ts +8 -0
  127. package/session/context/turn/message/note.d.ts.map +1 -0
  128. package/session/context/turn/message/note.js +1 -0
  129. package/session/context/turn/message/notice.d.ts +6 -0
  130. package/session/context/turn/message/notice.d.ts.map +1 -0
  131. package/session/context/turn/message/notice.js +1 -0
  132. package/session/context/turn/message/prompt.d.ts +8 -0
  133. package/session/context/turn/message/prompt.d.ts.map +1 -0
  134. package/session/context/turn/message/prompt.js +1 -0
  135. package/session/context/turn/message/reply.d.ts +6 -0
  136. package/session/context/turn/message/reply.d.ts.map +1 -0
  137. package/session/context/turn/message/reply.js +1 -0
  138. package/session/context/turn/message/sender.d.ts +14 -0
  139. package/session/context/turn/message/sender.d.ts.map +1 -0
  140. package/session/context/turn/message/sender.js +30 -0
  141. package/session/context/turn/message/skill.d.ts +7 -0
  142. package/session/context/turn/message/skill.d.ts.map +1 -0
  143. package/session/context/turn/message/skill.js +1 -0
  144. package/session/context/turn/message/tool-call.d.ts +9 -0
  145. package/session/context/turn/message/tool-call.d.ts.map +1 -0
  146. package/session/context/turn/message/tool-call.js +1 -0
  147. package/session/context/turn/message/tool-result.d.ts +8 -0
  148. package/session/context/turn/message/tool-result.d.ts.map +1 -0
  149. package/session/context/turn/message/tool-result.js +1 -0
  150. package/session/context/turn/turn.d.ts +13 -0
  151. package/session/context/turn/turn.d.ts.map +1 -0
  152. package/session/context/turn/turn.js +2 -0
  153. package/session/conversation.d.ts +73 -0
  154. package/session/conversation.d.ts.map +1 -0
  155. package/session/conversation.js +146 -0
  156. package/session/goal/goal.d.ts +11 -0
  157. package/session/goal/goal.d.ts.map +1 -0
  158. package/session/goal/goal.js +1 -0
  159. package/session/goal/task.d.ts +16 -0
  160. package/session/goal/task.d.ts.map +1 -0
  161. package/session/goal/task.js +3 -0
  162. package/session/session.d.ts +158 -0
  163. package/session/session.d.ts.map +1 -0
  164. package/session/session.js +2 -0
  165. package/src/jobs/check.ts +7 -4
  166. package/src/jobs/context.ts +24 -82
  167. package/src/jobs/permissions/decide-permission.ts +10 -8
  168. package/src/jobs/permissions/find-project-scope.ts +8 -14
  169. package/src/jobs/permissions/match-target.ts +3 -3
  170. package/src/jobs/permissions.ts +8 -6
  171. package/src/jobs/program.ts +13 -4
  172. package/src/jobs/prompt.ts +21 -24
  173. package/src/jobs/schedule.ts +14 -14
  174. package/src/jobs/slash-command.ts +20 -14
  175. package/src/jobs/status-line.ts +9 -21
  176. package/src/jobs/tool.ts +17 -11
  177. package/src/mod.ts +252 -97
  178. package/src/options.ts +22 -22
  179. package/src/records.ts +40 -23
  180. package/src/register.ts +34 -5
  181. package/src/runtime/announce.ts +76 -0
  182. package/src/runtime/before.ts +200 -0
  183. package/src/runtime/bound.ts +12 -0
  184. package/src/runtime/claude.ts +7 -2
  185. package/src/runtime/conversations.ts +579 -0
  186. package/src/runtime/deadline.ts +2 -2
  187. package/src/runtime/dependencies.ts +13 -1
  188. package/src/runtime/engine.ts +23 -0
  189. package/src/runtime/grants.ts +69 -29
  190. package/src/runtime/hooks.ts +39 -14
  191. package/src/runtime/installer.ts +16 -14
  192. package/src/runtime/lifecycle.ts +413 -201
  193. package/src/runtime/metadata.ts +37 -14
  194. package/src/runtime/options.ts +19 -4
  195. package/src/runtime/programs.ts +40 -1
  196. package/src/runtime/router.ts +11 -4
  197. package/src/runtime/sessions.ts +447 -0
  198. package/src/runtime/state.ts +50 -14
  199. package/src/runtime/toaster.ts +334 -0
  200. package/src/runtime/ui.ts +65 -143
  201. package/src/session/context/context.ts +14 -0
  202. package/src/session/context/turn/message/document.ts +8 -0
  203. package/src/session/context/turn/message/message.ts +203 -0
  204. package/src/session/context/turn/message/note.ts +9 -0
  205. package/src/session/context/turn/message/notice.ts +7 -0
  206. package/src/session/context/turn/message/prompt.ts +9 -0
  207. package/src/session/context/turn/message/reply.ts +7 -0
  208. package/src/session/context/turn/message/sender.ts +38 -0
  209. package/src/session/context/turn/message/skill.ts +8 -0
  210. package/src/session/context/turn/message/tool-call.ts +10 -0
  211. package/src/session/context/turn/message/tool-result.ts +9 -0
  212. package/src/session/context/turn/turn.ts +15 -0
  213. package/src/session/conversation.ts +194 -0
  214. package/src/session/goal/goal.ts +10 -0
  215. package/src/session/goal/task.ts +19 -0
  216. package/src/session/session.ts +141 -0
  217. package/src/testing/fake-claude.ts +25 -17
  218. package/src/testing/fake-elements.ts +3 -2
  219. package/src/testing/fake-files.ts +1 -1
  220. package/src/testing/fake-sessions.ts +277 -0
  221. package/src/testing.ts +138 -35
  222. package/src/ui/components.ts +3 -3
  223. package/src/ui/elements.ts +22 -8
  224. package/src/ui/markdown.ts +22 -26
  225. package/src/ui/places.ts +49 -0
  226. package/src/utils/call-effects.ts +5 -5
  227. package/src/utils/changelog.ts +32 -0
  228. package/src/utils/disposable.ts +3 -0
  229. package/src/utils/matcher.ts +37 -0
  230. package/src/utils/metadata.ts +17 -15
  231. package/src/utils/parse-shell.ts +9 -8
  232. package/src/utils/paths.ts +21 -4
  233. package/src/utils/text.ts +4 -0
  234. package/testing/fake-claude.d.ts +5 -1
  235. package/testing/fake-claude.d.ts.map +1 -1
  236. package/testing/fake-claude.js +21 -12
  237. package/testing/fake-elements.js +4 -2
  238. package/testing/fake-files.js +1 -1
  239. package/testing/fake-sessions.d.ts +81 -0
  240. package/testing/fake-sessions.d.ts.map +1 -0
  241. package/testing/fake-sessions.js +249 -0
  242. package/testing.d.ts +34 -13
  243. package/testing.d.ts.map +1 -1
  244. package/testing.js +115 -23
  245. package/ui/components.d.ts +2 -3
  246. package/ui/components.d.ts.map +1 -1
  247. package/ui/components.js +3 -3
  248. package/ui/elements.d.ts.map +1 -1
  249. package/ui/elements.js +19 -9
  250. package/ui/markdown.d.ts +35 -33
  251. package/ui/markdown.d.ts.map +1 -1
  252. package/ui/markdown.js +14 -16
  253. package/ui/places.d.ts +43 -0
  254. package/ui/places.d.ts.map +1 -0
  255. package/ui/places.js +31 -0
  256. package/utils/call-effects.d.ts +2 -1
  257. package/utils/call-effects.d.ts.map +1 -1
  258. package/utils/call-effects.js +3 -3
  259. package/utils/changelog.d.ts +9 -0
  260. package/utils/changelog.d.ts.map +1 -0
  261. package/utils/changelog.js +29 -0
  262. package/utils/disposable.d.ts +4 -0
  263. package/utils/disposable.d.ts.map +1 -0
  264. package/utils/disposable.js +1 -0
  265. package/utils/matcher.d.ts +13 -0
  266. package/utils/matcher.d.ts.map +1 -0
  267. package/utils/matcher.js +32 -0
  268. package/utils/metadata.d.ts +3 -3
  269. package/utils/metadata.js +18 -14
  270. package/utils/parse-shell.js +9 -7
  271. package/utils/paths.d.ts +4 -1
  272. package/utils/paths.d.ts.map +1 -1
  273. package/utils/paths.js +19 -4
  274. package/utils/text.d.ts +1 -0
  275. package/utils/text.d.ts.map +1 -1
  276. package/utils/text.js +3 -0
  277. package/src/ui/slots.ts +0 -36
  278. package/ui/slots.d.ts +0 -208
  279. package/ui/slots.d.ts.map +0 -1
  280. package/ui/slots.js +0 -19
@@ -0,0 +1,55 @@
1
+ import { Document } from './document.js';
2
+ import { Note } from './note.js';
3
+ import { Notice } from './notice.js';
4
+ import { Prompt } from './prompt.js';
5
+ import { Reply } from './reply.js';
6
+ import { Skill } from './skill.js';
7
+ import { ToolCall } from './tool-call.js';
8
+ import { ToolResult } from './tool-result.js';
9
+ export declare const Message = "message";
10
+ export type MessageType = typeof Prompt | typeof Note | typeof Reply | typeof ToolCall | typeof ToolResult | typeof Skill | typeof Document | typeof Notice;
11
+ export type MessageOf<Type extends MessageType> = {
12
+ readonly id: string;
13
+ readonly type: Type;
14
+ readonly at: string;
15
+ readonly session: string;
16
+ readonly context: number;
17
+ readonly turn?: string;
18
+ readonly task?: string;
19
+ };
20
+ export type Message = Prompt | Note | Reply | ToolCall | ToolResult | Skill | Document | Notice;
21
+ export type Placed = 'session' | 'context' | 'turn' | 'task';
22
+ export type Unplaced<M extends Message = Message> = M extends Message ? Omit<M, Placed> : never;
23
+ export type Row = {
24
+ readonly id: string;
25
+ readonly at: string;
26
+ readonly type: 'user' | 'assistant' | 'attachment' | 'system';
27
+ readonly name?: string;
28
+ readonly isMeta: boolean;
29
+ readonly isSummary: boolean;
30
+ readonly content: readonly unknown[];
31
+ readonly origin?: unknown;
32
+ readonly cwd?: string;
33
+ readonly path?: string;
34
+ readonly model?: string;
35
+ };
36
+ export declare const messageTypes: readonly MessageType[];
37
+ export declare const skillPrefix = "Base directory for this skill:";
38
+ export declare function rowOfLine(row: Readonly<Record<string, unknown>>): Row | undefined;
39
+ export declare function rowOfAppend(append: {
40
+ readonly uuid: string;
41
+ readonly door: string;
42
+ readonly origin: unknown;
43
+ readonly message: {
44
+ readonly type: Row['type'];
45
+ readonly name?: string;
46
+ readonly isMeta?: true;
47
+ readonly content: readonly unknown[];
48
+ };
49
+ }, at: string, cwd: string): Row;
50
+ export declare function messagesOf(row: Row, isInTask: boolean): Unplaced[];
51
+ export declare function withTexts(row: Row, texts: ReadonlyMap<number, string>): readonly unknown[];
52
+ export declare function textOf(content: unknown): string;
53
+ export declare function tagOf(text: string, tag: string): string | undefined;
54
+ export declare function searchText(message: Unplaced): string;
55
+ //# sourceMappingURL=message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../../src/session/context/turn/message/message.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ import { isObject } from '../../../../records.js';
2
+ import { Task } from '../../../goal/task.js';
3
+ import { Document } from './document.js';
4
+ import { Note } from './note.js';
5
+ import { Notice } from './notice.js';
6
+ import { Prompt } from './prompt.js';
7
+ import { Reply } from './reply.js';
8
+ import { senderOf } from './sender.js';
9
+ import { Skill } from './skill.js';
10
+ import { ToolCall } from './tool-call.js';
11
+ import { ToolResult } from './tool-result.js';
12
+ export const Message = 'message';
13
+ export const messageTypes = [Prompt, Note, Reply, ToolCall, ToolResult, Skill, Document, Notice];
14
+ export const skillPrefix = 'Base directory for this skill:';
15
+ const rowTypes = ['user', 'assistant', 'attachment', 'system'];
16
+ const memoryPath = /^Contents of (.+?) \(/;
17
+ export function rowOfLine(row) {
18
+ const { uuid, timestamp, type } = row;
19
+ if (typeof uuid !== 'string' || typeof timestamp !== 'string' || typeof type !== 'string' || !rowTypes.includes(type))
20
+ return undefined;
21
+ const message = isObject(row['message']) ? row['message'] : {};
22
+ const attachment = isObject(row['attachment']) ? row['attachment'] : {};
23
+ const content = type === 'attachment' ? attachment['content'] : type === 'system' ? row['content'] : message['content'];
24
+ const name = type === 'attachment' ? attachment['type'] : row['subtype'];
25
+ return {
26
+ id: uuid,
27
+ at: timestamp,
28
+ type: type,
29
+ ...(typeof name === 'string' ? { name } : {}),
30
+ isMeta: row['isMeta'] === true,
31
+ isSummary: row['isCompactSummary'] === true,
32
+ content: blocksOf(content),
33
+ ...(row['origin'] === undefined ? {} : { origin: row['origin'] }),
34
+ ...(typeof row['cwd'] === 'string' ? { cwd: row['cwd'] } : {}),
35
+ ...(typeof attachment['path'] === 'string' ? { path: attachment['path'] } : {}),
36
+ ...(typeof message['model'] === 'string' ? { model: message['model'] } : {}),
37
+ };
38
+ }
39
+ export function rowOfAppend(append, at, cwd) {
40
+ const { message, origin } = append;
41
+ const text = textOf(message.content);
42
+ const path = message.type === 'attachment' ? memoryPath.exec(text)?.[1] : undefined;
43
+ const model = isObject(origin) && origin['kind'] === 'model' && typeof origin['model'] === 'string' ? origin['model'] : undefined;
44
+ return {
45
+ id: append.uuid,
46
+ at,
47
+ type: message.type,
48
+ ...(message.name === undefined ? {} : { name: message.name }),
49
+ isMeta: message.isMeta === true,
50
+ isSummary: append.door === 'compaction',
51
+ content: message.content,
52
+ origin,
53
+ cwd,
54
+ ...(path === undefined ? {} : { path }),
55
+ ...(model === undefined ? {} : { model }),
56
+ };
57
+ }
58
+ export function messagesOf(row, isInTask) {
59
+ const found = unplacedOf(row, isInTask);
60
+ return found.length === 1 ? found : found.map((message, index) => ({ ...message, id: `${row.id}:${index}` }));
61
+ }
62
+ function unplacedOf(row, isInTask) {
63
+ const base = { id: row.id, at: row.at };
64
+ const text = textOf(row.content).trim();
65
+ if (row.type === 'system')
66
+ return row.name === 'turn_duration' || row.name === 'compact_boundary' || text === '' ? [] : [{ ...base, type: Notice, text }];
67
+ if (row.type === 'attachment')
68
+ return row.name === 'nested_memory' ? [{ ...base, type: Document, path: row.path ?? '', text }] : [];
69
+ if (row.type === 'assistant') {
70
+ return row.content.filter(isObject).flatMap((block) => {
71
+ if (block['type'] === 'text' && typeof block['text'] === 'string' && block['text'].trim() !== '')
72
+ return [{ ...base, type: Reply, text: block['text'].trim() }];
73
+ if (block['type'] !== 'tool_use' || typeof block['id'] !== 'string' || typeof block['name'] !== 'string')
74
+ return [];
75
+ return [{ ...base, type: ToolCall, callId: block['id'], name: block['name'], input: isObject(block['input']) ? block['input'] : {}, cwd: row.cwd ?? '' }];
76
+ });
77
+ }
78
+ if (row.isSummary)
79
+ return [];
80
+ const results = row.content.filter(isToolResultBlock);
81
+ if (results.length > 0)
82
+ return results.map((block) => ({ ...base, type: ToolResult, callId: block['tool_use_id'], text: textOf(block['content']), isError: block['is_error'] === true }));
83
+ if (text === '')
84
+ return [];
85
+ if (text.startsWith(skillPrefix))
86
+ return [{ ...base, type: Skill, name: basename(text.slice(skillPrefix.length).split('\n')[0]?.trim() ?? ''), text }];
87
+ if (text.startsWith('<task-notification'))
88
+ return [{ ...base, type: Note, text: tagOf(text, 'summary') ?? text, from: { type: Task } }];
89
+ if (row.isMeta)
90
+ return [{ ...base, type: Note, text, from: senderOf(row.origin, isInTask) }];
91
+ const prompt = promptText(text);
92
+ return prompt === undefined ? [] : [{ ...base, type: Prompt, text: prompt, from: senderOf(row.origin, isInTask) }];
93
+ }
94
+ export function withTexts(row, texts) {
95
+ if (row.type === 'assistant') {
96
+ let index = -1;
97
+ return row.content.map((block) => {
98
+ if (!isObject(block))
99
+ return block;
100
+ const isText = block['type'] === 'text' && typeof block['text'] === 'string' && block['text'].trim() !== '';
101
+ const isCall = block['type'] === 'tool_use' && typeof block['id'] === 'string' && typeof block['name'] === 'string';
102
+ if (!isText && !isCall)
103
+ return block;
104
+ index += 1;
105
+ const text = texts.get(index);
106
+ return isText && text !== undefined ? { ...block, text } : block;
107
+ });
108
+ }
109
+ if (row.type === 'user' && row.content.some(isToolResultBlock)) {
110
+ let index = -1;
111
+ return row.content.map((block) => {
112
+ if (!isToolResultBlock(block))
113
+ return block;
114
+ index += 1;
115
+ const text = texts.get(index);
116
+ if (text === undefined)
117
+ return block;
118
+ return { ...block, content: Array.isArray(block['content']) ? keepingMedia(block['content'], text) : text };
119
+ });
120
+ }
121
+ const text = texts.get(0);
122
+ if (text === undefined)
123
+ return row.content;
124
+ const whole = textOf(row.content);
125
+ if (whole.trim().startsWith('<task-notification') && tagOf(whole, 'summary') !== undefined)
126
+ return keepingMedia(row.content, whole.replace(/<summary>[\s\S]*?<\/summary>/, () => `<summary>${text}</summary>`));
127
+ return keepingMedia(row.content, text);
128
+ }
129
+ function keepingMedia(content, text) {
130
+ return [{ type: 'text', text }, ...content.filter((block) => !isObject(block) || block['type'] !== 'text')];
131
+ }
132
+ function isToolResultBlock(block) {
133
+ return isObject(block) && block['type'] === 'tool_result' && typeof block['tool_use_id'] === 'string';
134
+ }
135
+ export function textOf(content) {
136
+ if (typeof content === 'string')
137
+ return content;
138
+ if (!Array.isArray(content))
139
+ return '';
140
+ return content.flatMap((block) => (isObject(block) && block['type'] === 'text' && typeof block['text'] === 'string' ? [block['text']] : [])).join('\n');
141
+ }
142
+ export function tagOf(text, tag) {
143
+ return new RegExp(`<${tag}>([\\s\\S]*?)</${tag}>`).exec(text)?.[1]?.trim();
144
+ }
145
+ const toolValueChars = 1024;
146
+ export function searchText(message) {
147
+ if (message.type === ToolCall)
148
+ return [message.name, ...stringsIn(message.input).map((value) => value.slice(0, toolValueChars))].join('\n');
149
+ if (message.type === ToolResult)
150
+ return '';
151
+ if (message.type === Document)
152
+ return `${message.path}\n${message.text}`;
153
+ return message.text;
154
+ }
155
+ function blocksOf(content) {
156
+ if (Array.isArray(content))
157
+ return content;
158
+ return typeof content === 'string' && content !== '' ? [{ type: 'text', text: content }] : [];
159
+ }
160
+ function promptText(text) {
161
+ if (text.startsWith('<local-command-') || text.startsWith('<bash-stdout') || text.startsWith('<bash-stderr'))
162
+ return undefined;
163
+ const command = tagOf(text, 'command-name');
164
+ if (command === undefined)
165
+ return text;
166
+ const args = tagOf(text, 'command-args') ?? '';
167
+ return args === '' ? command : `${command} ${args}`;
168
+ }
169
+ function basename(path) {
170
+ return path.slice(path.lastIndexOf('/') + 1);
171
+ }
172
+ function stringsIn(value) {
173
+ if (typeof value === 'string')
174
+ return [value];
175
+ if (Array.isArray(value))
176
+ return value.flatMap(stringsIn);
177
+ return isObject(value) ? Object.values(value).flatMap(stringsIn) : [];
178
+ }
@@ -0,0 +1,8 @@
1
+ import type { MessageOf } from './message.js';
2
+ import type { Sender } from './sender.js';
3
+ export declare const Note = "note";
4
+ export type Note = MessageOf<typeof Note> & {
5
+ readonly text: string;
6
+ readonly from: Sender;
7
+ };
8
+ //# sourceMappingURL=note.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"note.d.ts","sourceRoot":"","sources":["../../../../src/session/context/turn/message/note.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,eAAO,MAAM,IAAI,SAAS,CAAA;AAE1B,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,IAAI,CAAC,GAAG;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,CAAA"}
@@ -0,0 +1 @@
1
+ export const Note = 'note';
@@ -0,0 +1,6 @@
1
+ import type { MessageOf } from './message.js';
2
+ export declare const Notice = "notice";
3
+ export type Notice = MessageOf<typeof Notice> & {
4
+ readonly text: string;
5
+ };
6
+ //# sourceMappingURL=notice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notice.d.ts","sourceRoot":"","sources":["../../../../src/session/context/turn/message/notice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,eAAO,MAAM,MAAM,WAAW,CAAA;AAE9B,MAAM,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,MAAM,CAAC,GAAG;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,CAAA"}
@@ -0,0 +1 @@
1
+ export const Notice = 'notice';
@@ -0,0 +1,8 @@
1
+ import type { MessageOf } from './message.js';
2
+ import type { Sender } from './sender.js';
3
+ export declare const Prompt = "prompt";
4
+ export type Prompt = MessageOf<typeof Prompt> & {
5
+ readonly text: string;
6
+ readonly from: Sender;
7
+ };
8
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../../src/session/context/turn/message/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,eAAO,MAAM,MAAM,WAAW,CAAA;AAE9B,MAAM,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,MAAM,CAAC,GAAG;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,CAAA"}
@@ -0,0 +1 @@
1
+ export const Prompt = 'prompt';
@@ -0,0 +1,6 @@
1
+ import type { MessageOf } from './message.js';
2
+ export declare const Reply = "reply";
3
+ export type Reply = MessageOf<typeof Reply> & {
4
+ readonly text: string;
5
+ };
6
+ //# sourceMappingURL=reply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply.d.ts","sourceRoot":"","sources":["../../../../src/session/context/turn/message/reply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,eAAO,MAAM,KAAK,UAAU,CAAA;AAE5B,MAAM,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,KAAK,CAAC,GAAG;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,CAAA"}
@@ -0,0 +1 @@
1
+ export const Reply = 'reply';
@@ -0,0 +1,14 @@
1
+ import { Task } from '../../../goal/task.js';
2
+ export declare const Person = "person";
3
+ export declare const Mod = "mod";
4
+ export declare const Schedule = "schedule";
5
+ export declare const Channel = "channel";
6
+ export declare const Sdk = "sdk";
7
+ export type SenderType = typeof Person | typeof Mod | 'session' | typeof Task | typeof Schedule | typeof Channel | typeof Sdk;
8
+ export type Sender = {
9
+ readonly type: SenderType;
10
+ readonly name?: string;
11
+ readonly as?: typeof Person;
12
+ };
13
+ export declare function senderOf(origin: unknown, isInTask: boolean): Sender;
14
+ //# sourceMappingURL=sender.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sender.d.ts","sourceRoot":"","sources":["../../../../src/session/context/turn/message/sender.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAE5C,eAAO,MAAM,MAAM,WAAW,CAAA;AAE9B,eAAO,MAAM,GAAG,QAAQ,CAAA;AAExB,eAAO,MAAM,QAAQ,aAAa,CAAA;AAElC,eAAO,MAAM,OAAO,YAAY,CAAA;AAEhC,eAAO,MAAM,GAAG,QAAQ,CAAA;AAExB,MAAM,MAAM,UAAU,GAAG,OAAO,MAAM,GAAG,OAAO,GAAG,GAAG,SAAS,GAAG,OAAO,IAAI,GAAG,OAAO,QAAQ,GAAG,OAAO,OAAO,GAAG,OAAO,GAAG,CAAA;AAE7H,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,MAAM,CAAA;CAC5B,CAAA;AAMD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAYnE"}
@@ -0,0 +1,30 @@
1
+ import { isObject } from '../../../../records.js';
2
+ import { Task } from '../../../goal/task.js';
3
+ export const Person = 'person';
4
+ export const Mod = 'mod';
5
+ export const Schedule = 'schedule';
6
+ export const Channel = 'channel';
7
+ export const Sdk = 'sdk';
8
+ const personOrigins = ['human', 'composer', 'bridge', 'slack-ping', 'auto-continuation'];
9
+ const sessionOrigins = ['peer', 'peer-send-message', 'coordinator', 'projects-relay', 'observer', 'observer-activity'];
10
+ export function senderOf(origin, isInTask) {
11
+ const fields = isObject(origin) ? origin : {};
12
+ const kind = typeof fields['kind'] === 'string' ? fields['kind'] : undefined;
13
+ if (kind === undefined)
14
+ return { type: isInTask ? Task : Person };
15
+ if (personOrigins.includes(kind))
16
+ return { type: Person };
17
+ if (sessionOrigins.includes(kind))
18
+ return { type: 'session' };
19
+ if (kind === 'plugin' && typeof fields['name'] === 'string')
20
+ return { type: Mod, name: fields['name'], ...(fields['asUser'] === true ? { as: Person } : {}) };
21
+ if (kind === 'scheduled-trigger')
22
+ return { type: Schedule };
23
+ if (kind === 'channel' && typeof fields['server'] === 'string')
24
+ return { type: Channel, name: fields['server'] };
25
+ if (kind === 'sdk')
26
+ return { type: Sdk };
27
+ if (kind === 'task-notification')
28
+ return { type: Task };
29
+ return { type: isInTask ? Task : Person };
30
+ }
@@ -0,0 +1,7 @@
1
+ import type { MessageOf } from './message.js';
2
+ export declare const Skill = "skill";
3
+ export type Skill = MessageOf<typeof Skill> & {
4
+ readonly name: string;
5
+ readonly text: string;
6
+ };
7
+ //# sourceMappingURL=skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../../../src/session/context/turn/message/skill.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,eAAO,MAAM,KAAK,UAAU,CAAA;AAE5B,MAAM,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,KAAK,CAAC,GAAG;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,CAAA"}
@@ -0,0 +1 @@
1
+ export const Skill = 'skill';
@@ -0,0 +1,9 @@
1
+ import type { MessageOf } from './message.js';
2
+ export declare const ToolCall = "toolCall";
3
+ export type ToolCall = MessageOf<typeof ToolCall> & {
4
+ readonly callId: string;
5
+ readonly name: string;
6
+ readonly input: Readonly<Record<string, unknown>>;
7
+ readonly cwd: string;
8
+ };
9
+ //# sourceMappingURL=tool-call.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-call.d.ts","sourceRoot":"","sources":["../../../../src/session/context/turn/message/tool-call.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,eAAO,MAAM,QAAQ,aAAa,CAAA;AAElC,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,QAAQ,CAAC,GAAG;IAClD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACjD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB,CAAA"}
@@ -0,0 +1 @@
1
+ export const ToolCall = 'toolCall';
@@ -0,0 +1,8 @@
1
+ import type { MessageOf } from './message.js';
2
+ export declare const ToolResult = "toolResult";
3
+ export type ToolResult = MessageOf<typeof ToolResult> & {
4
+ readonly callId: string;
5
+ readonly text: string;
6
+ readonly isError: boolean;
7
+ };
8
+ //# sourceMappingURL=tool-result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-result.d.ts","sourceRoot":"","sources":["../../../../src/session/context/turn/message/tool-result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,eAAO,MAAM,UAAU,eAAe,CAAA;AAEtC,MAAM,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,UAAU,CAAC,GAAG;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAC1B,CAAA"}
@@ -0,0 +1 @@
1
+ export const ToolResult = 'toolResult';
@@ -0,0 +1,13 @@
1
+ import type { RecordPart } from '../../session.js';
2
+ import type { Message } from './message/message.js';
3
+ import type { Prompt } from './message/prompt.js';
4
+ export declare const TurnStart = "turnStart";
5
+ export declare const TurnEnd = "turnEnd";
6
+ export type Turn = RecordPart & {
7
+ readonly prompt: Prompt;
8
+ readonly context: number;
9
+ readonly openedAt: string;
10
+ readonly closedAt?: string;
11
+ messages(): Promise<Message[]>;
12
+ };
13
+ //# sourceMappingURL=turn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn.d.ts","sourceRoot":"","sources":["../../../src/session/context/turn/turn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAEjD,eAAO,MAAM,SAAS,cAAc,CAAA;AAEpC,eAAO,MAAM,OAAO,YAAY,CAAA;AAEhC,MAAM,MAAM,IAAI,GAAG,UAAU,GAAG;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;CAC/B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export const TurnStart = 'turnStart';
2
+ export const TurnEnd = 'turnEnd';
@@ -0,0 +1,73 @@
1
+ import { ContextEnd, ContextStart, type Context } from './context/context.js';
2
+ import { Message, type Row } from './context/turn/message/message.js';
3
+ import { TurnEnd, TurnStart, type Turn } from './context/turn/turn.js';
4
+ import { GoalChange, type Goal } from './goal/goal.js';
5
+ import { Task, TaskEnd, TaskStart } from './goal/task.js';
6
+ import type { UsageChange, Usage } from './session.js';
7
+ export type SessionData = {
8
+ readonly id: string;
9
+ readonly title: string;
10
+ readonly project: string;
11
+ readonly cwd: string;
12
+ readonly model: string;
13
+ readonly startedAt: string;
14
+ readonly lastAt: string;
15
+ readonly forkedFrom?: string;
16
+ readonly isRunning: boolean;
17
+ readonly agentType?: string;
18
+ };
19
+ export type ContextData = Pick<Context, 'number' | 'openedAt' | 'closedAt' | 'task'>;
20
+ export type TurnData = Pick<Turn, 'prompt' | 'context' | 'openedAt' | 'closedAt'>;
21
+ export type TaskData = Pick<Task, 'id' | 'title' | 'openedBy' | 'openedAt' | 'closedAt'> & {
22
+ readonly agentType: string;
23
+ readonly model?: string;
24
+ readonly parent?: string;
25
+ };
26
+ export type RunningTask = TaskData & {
27
+ readonly context: number;
28
+ readonly contextOpenedAt?: string;
29
+ };
30
+ export type GoalData = Pick<Goal, 'text'> & {
31
+ readonly task?: string;
32
+ };
33
+ export type SessionChange = {
34
+ readonly type: typeof Message;
35
+ readonly message: Message;
36
+ } | {
37
+ readonly type: typeof TurnStart | typeof TurnEnd;
38
+ readonly turn: TurnData;
39
+ } | {
40
+ readonly type: typeof ContextStart | typeof ContextEnd;
41
+ readonly context: ContextData;
42
+ } | {
43
+ readonly type: typeof TaskStart | typeof TaskEnd;
44
+ readonly task: RunningTask;
45
+ } | {
46
+ readonly type: typeof GoalChange;
47
+ readonly goal: GoalData;
48
+ } | {
49
+ readonly type: typeof UsageChange;
50
+ readonly usage: Usage;
51
+ };
52
+ export type ConversationState = {
53
+ readonly session: string;
54
+ readonly context: number;
55
+ readonly contextOpenedAt: string;
56
+ readonly turn?: TurnData;
57
+ readonly goal?: string;
58
+ readonly agentCalls: readonly string[];
59
+ readonly endedCalls: Readonly<Record<string, string>>;
60
+ readonly tasks: Readonly<Record<string, RunningTask>>;
61
+ readonly taskTurns: Readonly<Record<string, TurnData>>;
62
+ };
63
+ export type Conversation = {
64
+ add(row: Row, task?: string): SessionChange[];
65
+ startTask(task: TaskData): SessionChange[];
66
+ startContext(at: string): SessionChange[];
67
+ changeGoal(text: string): SessionChange[];
68
+ readonly state: ConversationState;
69
+ };
70
+ export declare const searchLimit = 50;
71
+ export declare function emptyConversation(session: string): ConversationState;
72
+ export declare function createConversation(start: ConversationState): Conversation;
73
+ //# sourceMappingURL=conversation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../src/session/conversation.ts"],"names":[],"mappings":"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"}