@qearlyao/familiar 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 (72) hide show
  1. package/.env.example +31 -0
  2. package/HEARTBEAT.md +23 -0
  3. package/LICENSE +21 -0
  4. package/MEMORY.md +1 -0
  5. package/README.md +245 -0
  6. package/SOUL.md +13 -0
  7. package/USER.md +13 -0
  8. package/config.example.toml +221 -0
  9. package/dist/agent-events.js +167 -0
  10. package/dist/agent.js +590 -0
  11. package/dist/browser-tools.js +638 -0
  12. package/dist/chat-log.js +130 -0
  13. package/dist/cli.js +168 -0
  14. package/dist/config.js +804 -0
  15. package/dist/data-retention.js +54 -0
  16. package/dist/discord.js +1203 -0
  17. package/dist/generated-media.js +86 -0
  18. package/dist/image-derivatives.js +102 -0
  19. package/dist/image-gen.js +440 -0
  20. package/dist/inbound-attachments.js +266 -0
  21. package/dist/index.js +10 -0
  22. package/dist/media-understanding.js +120 -0
  23. package/dist/memory/diary/ambient-injector.js +180 -0
  24. package/dist/memory/diary/ambient.js +124 -0
  25. package/dist/memory/diary/chunks.js +231 -0
  26. package/dist/memory/diary/index.js +3 -0
  27. package/dist/memory/diary/indexer.js +93 -0
  28. package/dist/memory/doctor.js +250 -0
  29. package/dist/memory/index/chunk-indexer.js +151 -0
  30. package/dist/memory/index/embedding-provider.js +119 -0
  31. package/dist/memory/index/fts-query.js +18 -0
  32. package/dist/memory/index/retrieval.js +246 -0
  33. package/dist/memory/index/schema.js +157 -0
  34. package/dist/memory/index/store.js +513 -0
  35. package/dist/memory/index/vec.js +72 -0
  36. package/dist/memory/index/vector-codec.js +27 -0
  37. package/dist/memory/lcm/backfill.js +247 -0
  38. package/dist/memory/lcm/condense.js +146 -0
  39. package/dist/memory/lcm/context-transformer.js +662 -0
  40. package/dist/memory/lcm/context.js +421 -0
  41. package/dist/memory/lcm/eviction-score.js +38 -0
  42. package/dist/memory/lcm/index.js +6 -0
  43. package/dist/memory/lcm/indexer.js +200 -0
  44. package/dist/memory/lcm/normalize.js +235 -0
  45. package/dist/memory/lcm/schema.js +188 -0
  46. package/dist/memory/lcm/segment-manager.js +136 -0
  47. package/dist/memory/lcm/store.js +722 -0
  48. package/dist/memory/lcm/summarizer.js +258 -0
  49. package/dist/memory/lcm/types.js +1 -0
  50. package/dist/memory/operator.js +477 -0
  51. package/dist/memory/service.js +202 -0
  52. package/dist/memory/tools.js +205 -0
  53. package/dist/models.js +165 -0
  54. package/dist/persona.js +54 -0
  55. package/dist/runtime.js +493 -0
  56. package/dist/scheduler.js +200 -0
  57. package/dist/settings.js +116 -0
  58. package/dist/skills.js +38 -0
  59. package/dist/tts.js +143 -0
  60. package/dist/web-auth.js +105 -0
  61. package/dist/web-events.js +114 -0
  62. package/dist/web-http.js +29 -0
  63. package/dist/web-static.js +106 -0
  64. package/dist/web-tools.js +940 -0
  65. package/dist/web-types.js +2 -0
  66. package/dist/web.js +844 -0
  67. package/package.json +60 -0
  68. package/web/dist/assets/index-ClgkMgaq.css +2 -0
  69. package/web/dist/assets/index-Cu2QquuR.js +59 -0
  70. package/web/dist/favicon.svg +1 -0
  71. package/web/dist/icons.svg +24 -0
  72. package/web/dist/index.html +20 -0
@@ -0,0 +1,167 @@
1
+ function isRecord(value) {
2
+ return !!value && typeof value === "object" && !Array.isArray(value);
3
+ }
4
+ function normalizeToolArguments(value) {
5
+ return isRecord(value) ? value : {};
6
+ }
7
+ function deltaKind(event) {
8
+ if (event.type !== "message_update")
9
+ return undefined;
10
+ const assistantEvent = event.assistantMessageEvent;
11
+ return assistantEvent.type === "text_delta" || assistantEvent.type === "thinking_delta"
12
+ ? assistantEvent.type
13
+ : undefined;
14
+ }
15
+ function deltaText(event) {
16
+ if (event.type !== "message_update")
17
+ return "";
18
+ const assistantEvent = event.assistantMessageEvent;
19
+ return assistantEvent.type === "text_delta" || assistantEvent.type === "thinking_delta" ? assistantEvent.delta : "";
20
+ }
21
+ function deltaEvent(kind, delta) {
22
+ return { type: "message_update", assistantMessageEvent: { type: kind, delta } };
23
+ }
24
+ export function createAgentEventRecorder(write) {
25
+ let pendingKind;
26
+ let pendingDelta = "";
27
+ const flush = async () => {
28
+ if (!pendingKind || !pendingDelta) {
29
+ pendingKind = undefined;
30
+ pendingDelta = "";
31
+ return;
32
+ }
33
+ const kind = pendingKind;
34
+ const delta = pendingDelta;
35
+ pendingKind = undefined;
36
+ pendingDelta = "";
37
+ const event = deltaEvent(kind, delta);
38
+ await write(event);
39
+ };
40
+ return {
41
+ async record(event) {
42
+ const kind = deltaKind(event);
43
+ if (kind) {
44
+ if (pendingKind === kind) {
45
+ pendingDelta += deltaText(event);
46
+ return;
47
+ }
48
+ await flush();
49
+ pendingKind = kind;
50
+ pendingDelta = deltaText(event);
51
+ return;
52
+ }
53
+ await flush();
54
+ await write(event);
55
+ },
56
+ flush,
57
+ };
58
+ }
59
+ function usageFromAgentEvent(event) {
60
+ if (event.type !== "message_end" || event.message.role !== "assistant")
61
+ return undefined;
62
+ const usage = event.message.usage;
63
+ return {
64
+ input: usage.input,
65
+ output: usage.output,
66
+ cacheRead: usage.cacheRead,
67
+ cacheWrite: usage.cacheWrite,
68
+ cost: usage.cost.total,
69
+ };
70
+ }
71
+ function storedAssistantMessageEvent(event) {
72
+ if (event.type !== "message_update")
73
+ return undefined;
74
+ const assistantEvent = event.assistantMessageEvent;
75
+ if (assistantEvent.type === "text_delta") {
76
+ return { type: "text_delta", delta: assistantEvent.delta };
77
+ }
78
+ if (assistantEvent.type === "thinking_delta") {
79
+ return { type: "thinking_delta", delta: assistantEvent.delta };
80
+ }
81
+ if (assistantEvent.type === "toolcall_start") {
82
+ return { type: "toolcall_start", contentIndex: assistantEvent.contentIndex };
83
+ }
84
+ if (assistantEvent.type === "toolcall_delta") {
85
+ return {
86
+ type: "toolcall_delta",
87
+ contentIndex: assistantEvent.contentIndex,
88
+ delta: assistantEvent.delta,
89
+ };
90
+ }
91
+ if (assistantEvent.type === "toolcall_end") {
92
+ return {
93
+ type: "toolcall_end",
94
+ contentIndex: assistantEvent.contentIndex,
95
+ toolCall: {
96
+ id: assistantEvent.toolCall.id,
97
+ name: assistantEvent.toolCall.name,
98
+ arguments: normalizeToolArguments(assistantEvent.toolCall.arguments),
99
+ },
100
+ };
101
+ }
102
+ return undefined;
103
+ }
104
+ export function storedAgentEventFromAgentEvent(event) {
105
+ if (event.type === "agent_start" || event.type === "agent_end")
106
+ return { type: event.type };
107
+ if (event.type === "turn_start" || event.type === "turn_end")
108
+ return { type: event.type };
109
+ if (event.type === "message_start") {
110
+ return { type: "message_start", role: event.message.role };
111
+ }
112
+ if (event.type === "message_update") {
113
+ const assistantMessageEvent = storedAssistantMessageEvent(event);
114
+ return assistantMessageEvent ? { type: "message_update", assistantMessageEvent } : undefined;
115
+ }
116
+ if (event.type === "message_end") {
117
+ return {
118
+ type: "message_end",
119
+ role: event.message.role,
120
+ stopReason: event.message.role === "assistant" ? event.message.stopReason : undefined,
121
+ errorMessage: event.message.role === "assistant" ? event.message.errorMessage : undefined,
122
+ usage: usageFromAgentEvent(event),
123
+ };
124
+ }
125
+ if (event.type === "tool_execution_start") {
126
+ return {
127
+ type: "tool_execution_start",
128
+ toolCallId: event.toolCallId,
129
+ toolName: event.toolName,
130
+ args: event.args,
131
+ };
132
+ }
133
+ if (event.type === "tool_execution_update") {
134
+ return {
135
+ type: "tool_execution_update",
136
+ toolCallId: event.toolCallId,
137
+ toolName: event.toolName,
138
+ args: event.args,
139
+ partialResult: event.partialResult,
140
+ };
141
+ }
142
+ return {
143
+ type: "tool_execution_end",
144
+ toolCallId: event.toolCallId,
145
+ toolName: event.toolName,
146
+ result: event.result,
147
+ isError: event.isError,
148
+ };
149
+ }
150
+ export function updateAgentEventSummary(summary, event, now = Date.now()) {
151
+ if (event.type !== "message_update")
152
+ return;
153
+ const assistantEvent = event.assistantMessageEvent;
154
+ if (assistantEvent.type === "thinking_delta") {
155
+ summary.thinkingStart ??= now;
156
+ summary.thinkingEnd = now;
157
+ summary.thinking += assistantEvent.delta;
158
+ }
159
+ if (assistantEvent.type === "thinking_end") {
160
+ summary.thinkingEnd = now;
161
+ }
162
+ }
163
+ export function thinkingDurationMs(summary) {
164
+ if (summary.thinkingStart === undefined)
165
+ return undefined;
166
+ return Math.max(0, (summary.thinkingEnd ?? Date.now()) - summary.thinkingStart);
167
+ }