@limo-labs/deity 0.1.0-alpha.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 (138) hide show
  1. package/README.md +519 -0
  2. package/dist/src/component.d.ts +19 -0
  3. package/dist/src/component.d.ts.map +1 -0
  4. package/dist/src/component.js +2 -0
  5. package/dist/src/component.js.map +1 -0
  6. package/dist/src/context/context-scope.d.ts +24 -0
  7. package/dist/src/context/context-scope.d.ts.map +1 -0
  8. package/dist/src/context/context-scope.js +19 -0
  9. package/dist/src/context/context-scope.js.map +1 -0
  10. package/dist/src/context/memory-view.d.ts +62 -0
  11. package/dist/src/context/memory-view.d.ts.map +1 -0
  12. package/dist/src/context/memory-view.js +104 -0
  13. package/dist/src/context/memory-view.js.map +1 -0
  14. package/dist/src/context/scoped-context.d.ts +51 -0
  15. package/dist/src/context/scoped-context.d.ts.map +1 -0
  16. package/dist/src/context/scoped-context.js +74 -0
  17. package/dist/src/context/scoped-context.js.map +1 -0
  18. package/dist/src/context/scoped-execution-context.d.ts +55 -0
  19. package/dist/src/context/scoped-execution-context.d.ts.map +1 -0
  20. package/dist/src/context/scoped-execution-context.js +78 -0
  21. package/dist/src/context/scoped-execution-context.js.map +1 -0
  22. package/dist/src/conversation/conversation-manager.d.ts +272 -0
  23. package/dist/src/conversation/conversation-manager.d.ts.map +1 -0
  24. package/dist/src/conversation/conversation-manager.js +11 -0
  25. package/dist/src/conversation/conversation-manager.js.map +1 -0
  26. package/dist/src/conversation/conversation-pruner.d.ts +190 -0
  27. package/dist/src/conversation/conversation-pruner.d.ts.map +1 -0
  28. package/dist/src/conversation/conversation-pruner.js +274 -0
  29. package/dist/src/conversation/conversation-pruner.js.map +1 -0
  30. package/dist/src/conversation/conversation-tree.d.ts +185 -0
  31. package/dist/src/conversation/conversation-tree.d.ts.map +1 -0
  32. package/dist/src/conversation/conversation-tree.js +288 -0
  33. package/dist/src/conversation/conversation-tree.js.map +1 -0
  34. package/dist/src/conversation/file-conversation-store.d.ts +93 -0
  35. package/dist/src/conversation/file-conversation-store.d.ts.map +1 -0
  36. package/dist/src/conversation/file-conversation-store.js +284 -0
  37. package/dist/src/conversation/file-conversation-store.js.map +1 -0
  38. package/dist/src/conversation/in-memory-conversation-store.d.ts +36 -0
  39. package/dist/src/conversation/in-memory-conversation-store.d.ts.map +1 -0
  40. package/dist/src/conversation/in-memory-conversation-store.js +146 -0
  41. package/dist/src/conversation/in-memory-conversation-store.js.map +1 -0
  42. package/dist/src/copilot-adapter.d.ts +33 -0
  43. package/dist/src/copilot-adapter.d.ts.map +1 -0
  44. package/dist/src/copilot-adapter.js +119 -0
  45. package/dist/src/copilot-adapter.js.map +1 -0
  46. package/dist/src/file-trace-enhanced.d.ts +123 -0
  47. package/dist/src/file-trace-enhanced.d.ts.map +1 -0
  48. package/dist/src/file-trace-enhanced.js +177 -0
  49. package/dist/src/file-trace-enhanced.js.map +1 -0
  50. package/dist/src/file-trace.d.ts +24 -0
  51. package/dist/src/file-trace.d.ts.map +1 -0
  52. package/dist/src/file-trace.js +60 -0
  53. package/dist/src/file-trace.js.map +1 -0
  54. package/dist/src/index.d.ts +63 -0
  55. package/dist/src/index.d.ts.map +1 -0
  56. package/dist/src/index.js +40 -0
  57. package/dist/src/index.js.map +1 -0
  58. package/dist/src/json-store.d.ts +27 -0
  59. package/dist/src/json-store.d.ts.map +1 -0
  60. package/dist/src/json-store.js +93 -0
  61. package/dist/src/json-store.js.map +1 -0
  62. package/dist/src/llm.d.ts +35 -0
  63. package/dist/src/llm.d.ts.map +1 -0
  64. package/dist/src/llm.js +2 -0
  65. package/dist/src/llm.js.map +1 -0
  66. package/dist/src/memory/cold-storage.d.ts +60 -0
  67. package/dist/src/memory/cold-storage.d.ts.map +1 -0
  68. package/dist/src/memory/cold-storage.js +132 -0
  69. package/dist/src/memory/cold-storage.js.map +1 -0
  70. package/dist/src/memory/compression.d.ts +161 -0
  71. package/dist/src/memory/compression.d.ts.map +1 -0
  72. package/dist/src/memory/compression.js +193 -0
  73. package/dist/src/memory/compression.js.map +1 -0
  74. package/dist/src/memory/hot-memory.d.ts +69 -0
  75. package/dist/src/memory/hot-memory.d.ts.map +1 -0
  76. package/dist/src/memory/hot-memory.js +116 -0
  77. package/dist/src/memory/hot-memory.js.map +1 -0
  78. package/dist/src/memory/memory-budget.d.ts +162 -0
  79. package/dist/src/memory/memory-budget.d.ts.map +1 -0
  80. package/dist/src/memory/memory-budget.js +241 -0
  81. package/dist/src/memory/memory-budget.js.map +1 -0
  82. package/dist/src/memory/memory-config.d.ts +419 -0
  83. package/dist/src/memory/memory-config.d.ts.map +1 -0
  84. package/dist/src/memory/memory-config.js +297 -0
  85. package/dist/src/memory/memory-config.js.map +1 -0
  86. package/dist/src/memory/prefetcher.d.ts +137 -0
  87. package/dist/src/memory/prefetcher.d.ts.map +1 -0
  88. package/dist/src/memory/prefetcher.js +186 -0
  89. package/dist/src/memory/prefetcher.js.map +1 -0
  90. package/dist/src/memory/tiered-memory.d.ts +116 -0
  91. package/dist/src/memory/tiered-memory.d.ts.map +1 -0
  92. package/dist/src/memory/tiered-memory.js +215 -0
  93. package/dist/src/memory/tiered-memory.js.map +1 -0
  94. package/dist/src/memory/warm-storage.d.ts +74 -0
  95. package/dist/src/memory/warm-storage.d.ts.map +1 -0
  96. package/dist/src/memory/warm-storage.js +207 -0
  97. package/dist/src/memory/warm-storage.js.map +1 -0
  98. package/dist/src/openai-adapter.d.ts +20 -0
  99. package/dist/src/openai-adapter.d.ts.map +1 -0
  100. package/dist/src/openai-adapter.js +73 -0
  101. package/dist/src/openai-adapter.js.map +1 -0
  102. package/dist/src/parser.d.ts +27 -0
  103. package/dist/src/parser.d.ts.map +1 -0
  104. package/dist/src/parser.js +76 -0
  105. package/dist/src/parser.js.map +1 -0
  106. package/dist/src/runtime.d.ts +172 -0
  107. package/dist/src/runtime.d.ts.map +1 -0
  108. package/dist/src/runtime.js +436 -0
  109. package/dist/src/runtime.js.map +1 -0
  110. package/dist/src/schema-utils.d.ts +7 -0
  111. package/dist/src/schema-utils.d.ts.map +1 -0
  112. package/dist/src/schema-utils.js +71 -0
  113. package/dist/src/schema-utils.js.map +1 -0
  114. package/dist/src/stage.d.ts +139 -0
  115. package/dist/src/stage.d.ts.map +1 -0
  116. package/dist/src/stage.js +2 -0
  117. package/dist/src/stage.js.map +1 -0
  118. package/dist/src/store.d.ts +51 -0
  119. package/dist/src/store.d.ts.map +1 -0
  120. package/dist/src/store.js +2 -0
  121. package/dist/src/store.js.map +1 -0
  122. package/dist/src/tool.d.ts +12 -0
  123. package/dist/src/tool.d.ts.map +1 -0
  124. package/dist/src/tool.js +2 -0
  125. package/dist/src/tool.js.map +1 -0
  126. package/dist/src/trace.d.ts +60 -0
  127. package/dist/src/trace.d.ts.map +1 -0
  128. package/dist/src/trace.js +2 -0
  129. package/dist/src/trace.js.map +1 -0
  130. package/dist/src/validator.d.ts +17 -0
  131. package/dist/src/validator.d.ts.map +1 -0
  132. package/dist/src/validator.js +21 -0
  133. package/dist/src/validator.js.map +1 -0
  134. package/dist/src/workflow.d.ts +192 -0
  135. package/dist/src/workflow.d.ts.map +1 -0
  136. package/dist/src/workflow.js +50 -0
  137. package/dist/src/workflow.js.map +1 -0
  138. package/package.json +62 -0
@@ -0,0 +1,36 @@
1
+ /**
2
+ * In-memory implementation of ConversationManager for testing and simple use cases.
3
+ *
4
+ * @module conversation/in-memory-conversation-store
5
+ * @since 2.0.0
6
+ */
7
+ import type { ConversationManager, ConversationMessage, ConversationQuery, ConversationSnapshot, ConversationStats, MessageMetadata, PruneStrategy } from "./conversation-manager.js";
8
+ import type { Message } from "../component.js";
9
+ /**
10
+ * Simple in-memory conversation storage.
11
+ *
12
+ * This implementation keeps all messages in memory without persistence.
13
+ * Useful for testing, temporary conversations, or when persistence isn't needed.
14
+ *
15
+ * @since 2.0.0
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const store = new InMemoryConversationStore();
20
+ * await store.addMessage({ role: "user", content: "Hello!" });
21
+ * const history = await store.getHistory();
22
+ * ```
23
+ */
24
+ export declare class InMemoryConversationStore implements ConversationManager {
25
+ private messages;
26
+ addMessage(message: Message, metadata?: Partial<Omit<MessageMetadata, "id" | "timestamp">>): Promise<void>;
27
+ getHistory(): Promise<ConversationMessage[]>;
28
+ getRecent(count: number): Promise<ConversationMessage[]>;
29
+ search(query: ConversationQuery): Promise<ConversationMessage[]>;
30
+ prune(strategy: PruneStrategy): Promise<number>;
31
+ clear(): Promise<void>;
32
+ getStats(): Promise<ConversationStats>;
33
+ export(): Promise<ConversationSnapshot>;
34
+ import(snapshot: ConversationSnapshot): Promise<void>;
35
+ }
36
+ //# sourceMappingURL=in-memory-conversation-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-conversation-store.d.ts","sourceRoot":"","sources":["../../../src/conversation/in-memory-conversation-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACd,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG/C;;;;;;;;;;;;;;GAcG;AACH,qBAAa,yBAA0B,YAAW,mBAAmB;IACnE,OAAO,CAAC,QAAQ,CAA6B;IAEvC,UAAU,CACd,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,WAAW,CAAC,CAAC,GAC5D,OAAO,CAAC,IAAI,CAAC;IAaV,UAAU,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAI5C,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAOxD,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IA0ChE,KAAK,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IA4C/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAgCtC,MAAM,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAQvC,MAAM,CAAC,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;CAS5D"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * In-memory implementation of ConversationManager for testing and simple use cases.
3
+ *
4
+ * @module conversation/in-memory-conversation-store
5
+ * @since 2.0.0
6
+ */
7
+ import { randomUUID } from "node:crypto";
8
+ /**
9
+ * Simple in-memory conversation storage.
10
+ *
11
+ * This implementation keeps all messages in memory without persistence.
12
+ * Useful for testing, temporary conversations, or when persistence isn't needed.
13
+ *
14
+ * @since 2.0.0
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const store = new InMemoryConversationStore();
19
+ * await store.addMessage({ role: "user", content: "Hello!" });
20
+ * const history = await store.getHistory();
21
+ * ```
22
+ */
23
+ export class InMemoryConversationStore {
24
+ messages = [];
25
+ async addMessage(message, metadata) {
26
+ const fullMetadata = {
27
+ id: randomUUID(),
28
+ timestamp: Date.now(),
29
+ ...metadata,
30
+ };
31
+ this.messages.push({
32
+ message,
33
+ metadata: fullMetadata,
34
+ });
35
+ }
36
+ async getHistory() {
37
+ return [...this.messages];
38
+ }
39
+ async getRecent(count) {
40
+ if (count === 0) {
41
+ return [];
42
+ }
43
+ return this.messages.slice(-count);
44
+ }
45
+ async search(query) {
46
+ let results = [...this.messages];
47
+ if (query.role !== undefined) {
48
+ results = results.filter((msg) => msg.message.role === query.role);
49
+ }
50
+ if (query.content !== undefined) {
51
+ const searchLower = query.content.toLowerCase();
52
+ results = results.filter((msg) => msg.message.content.toLowerCase().includes(searchLower));
53
+ }
54
+ if (query.stageId !== undefined) {
55
+ results = results.filter((msg) => msg.metadata.stageId === query.stageId);
56
+ }
57
+ if (query.after !== undefined) {
58
+ results = results.filter((msg) => msg.metadata.timestamp >= query.after);
59
+ }
60
+ if (query.before !== undefined) {
61
+ results = results.filter((msg) => msg.metadata.timestamp <= query.before);
62
+ }
63
+ if (query.important !== undefined) {
64
+ results = results.filter((msg) => msg.metadata.important === query.important);
65
+ }
66
+ if (query.limit !== undefined && query.limit > 0) {
67
+ results = results.slice(0, query.limit);
68
+ }
69
+ return results;
70
+ }
71
+ async prune(strategy) {
72
+ const originalLength = this.messages.length;
73
+ if (originalLength === 0) {
74
+ return 0;
75
+ }
76
+ const toKeep = [];
77
+ const now = Date.now();
78
+ for (let i = 0; i < this.messages.length; i++) {
79
+ const msg = this.messages[i];
80
+ let keep = false;
81
+ if (strategy.keepRecent !== undefined &&
82
+ i >= this.messages.length - strategy.keepRecent) {
83
+ keep = true;
84
+ }
85
+ if (strategy.keepImportant !== undefined &&
86
+ strategy.keepImportant(msg)) {
87
+ keep = true;
88
+ }
89
+ if (strategy.maxAge !== undefined) {
90
+ const age = now - msg.metadata.timestamp;
91
+ if (age <= strategy.maxAge) {
92
+ keep = true;
93
+ }
94
+ }
95
+ if (keep) {
96
+ toKeep.push(msg);
97
+ }
98
+ }
99
+ this.messages = toKeep;
100
+ return originalLength - toKeep.length;
101
+ }
102
+ async clear() {
103
+ this.messages = [];
104
+ }
105
+ async getStats() {
106
+ const byRole = {};
107
+ let totalTokens = 0;
108
+ let oldestMessage;
109
+ let newestMessage;
110
+ for (const msg of this.messages) {
111
+ const role = msg.message.role;
112
+ byRole[role] = (byRole[role] || 0) + 1;
113
+ if (msg.metadata.tokens !== undefined) {
114
+ totalTokens += msg.metadata.tokens;
115
+ }
116
+ const timestamp = msg.metadata.timestamp;
117
+ if (oldestMessage === undefined || timestamp < oldestMessage) {
118
+ oldestMessage = timestamp;
119
+ }
120
+ if (newestMessage === undefined || timestamp > newestMessage) {
121
+ newestMessage = timestamp;
122
+ }
123
+ }
124
+ return {
125
+ messageCount: this.messages.length,
126
+ byRole,
127
+ totalTokens: totalTokens > 0 ? totalTokens : undefined,
128
+ oldestMessage,
129
+ newestMessage,
130
+ };
131
+ }
132
+ async export() {
133
+ return {
134
+ version: "1.0.0",
135
+ createdAt: Date.now(),
136
+ messages: [...this.messages],
137
+ };
138
+ }
139
+ async import(snapshot) {
140
+ if (!snapshot.version.startsWith("1.")) {
141
+ throw new Error(`Unsupported snapshot version: ${snapshot.version}. Expected 1.x`);
142
+ }
143
+ this.messages = [...snapshot.messages];
144
+ }
145
+ }
146
+ //# sourceMappingURL=in-memory-conversation-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-conversation-store.js","sourceRoot":"","sources":["../../../src/conversation/in-memory-conversation-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { Message } from "./component.js";
2
+ import type { LLMAdapter, LLMResponse, GenerationConfig } from "./llm.js";
3
+ import type { Tool } from "./tool.js";
4
+ export interface CopilotAdapterConfig {
5
+ /** GitHub PAT or output of `gh auth token`. Must have Copilot scope. */
6
+ githubToken: string;
7
+ /** Model to use (default: "gpt-4o") */
8
+ model?: string;
9
+ }
10
+ /**
11
+ * GitHub Copilot LLM adapter.
12
+ *
13
+ * Auth flow:
14
+ * 1. Exchange GitHub token for a short-lived Copilot session token
15
+ * 2. Use the session token as Bearer auth against the Copilot chat API
16
+ * 3. Token is cached and auto-refreshed when expired
17
+ *
18
+ * The chat completions API is OpenAI-compatible in request/response format.
19
+ */
20
+ export declare class CopilotAdapter implements LLMAdapter {
21
+ private githubToken;
22
+ private model;
23
+ private cachedToken;
24
+ private tokenExpiresAt;
25
+ constructor(config: CopilotAdapterConfig);
26
+ /**
27
+ * Exchange the GitHub token for a Copilot session token.
28
+ * Caches the token and reuses it until it expires.
29
+ */
30
+ private getCopilotToken;
31
+ generate(messages: Message[], tools?: Tool[], config?: GenerationConfig): Promise<LLMResponse>;
32
+ }
33
+ //# sourceMappingURL=copilot-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-adapter.d.ts","sourceRoot":"","sources":["../../src/copilot-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAY,MAAM,UAAU,CAAC;AACpF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAMtC,MAAM,WAAW,oBAAoB;IACnC,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAOD;;;;;;;;;GASG;AACH,qBAAa,cAAe,YAAW,UAAU;IAC/C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAa;gBAEvB,MAAM,EAAE,oBAAoB;IAKxC;;;OAGG;YACW,eAAe;IAgCvB,QAAQ,CACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,CAAC,EAAE,IAAI,EAAE,EACd,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,WAAW,CAAC;CA4FxB"}
@@ -0,0 +1,119 @@
1
+ import { zodToJsonSchema } from "./schema-utils.js";
2
+ const COPILOT_TOKEN_URL = "https://api.github.com/copilot_internal/v2/token";
3
+ const COPILOT_CHAT_URL = "https://api.githubcopilot.com/chat/completions";
4
+ /**
5
+ * GitHub Copilot LLM adapter.
6
+ *
7
+ * Auth flow:
8
+ * 1. Exchange GitHub token for a short-lived Copilot session token
9
+ * 2. Use the session token as Bearer auth against the Copilot chat API
10
+ * 3. Token is cached and auto-refreshed when expired
11
+ *
12
+ * The chat completions API is OpenAI-compatible in request/response format.
13
+ */
14
+ export class CopilotAdapter {
15
+ githubToken;
16
+ model;
17
+ cachedToken = null;
18
+ tokenExpiresAt = 0;
19
+ constructor(config) {
20
+ this.githubToken = config.githubToken;
21
+ this.model = config.model ?? "gpt-4o";
22
+ }
23
+ /**
24
+ * Exchange the GitHub token for a Copilot session token.
25
+ * Caches the token and reuses it until it expires.
26
+ */
27
+ async getCopilotToken() {
28
+ // Return cached token if still valid (with 60s buffer)
29
+ if (this.cachedToken && Date.now() / 1000 < this.tokenExpiresAt - 60) {
30
+ return this.cachedToken;
31
+ }
32
+ const response = await fetch(COPILOT_TOKEN_URL, {
33
+ method: "GET",
34
+ headers: {
35
+ Authorization: `Bearer ${this.githubToken}`,
36
+ Accept: "application/json",
37
+ "User-Agent": "GitHubCopilotChat/0.26.7",
38
+ "Editor-Version": "vscode/1.99.3",
39
+ "Editor-Plugin-Version": "copilot-chat/0.26.7",
40
+ },
41
+ });
42
+ if (!response.ok) {
43
+ const text = await response.text();
44
+ throw new Error(`Failed to obtain Copilot token (${response.status}): ${text}. ` +
45
+ `Ensure your GitHub token has Copilot access.`);
46
+ }
47
+ const data = (await response.json());
48
+ this.cachedToken = data.token;
49
+ this.tokenExpiresAt = data.expires_at;
50
+ return this.cachedToken;
51
+ }
52
+ async generate(messages, tools, config) {
53
+ const copilotToken = await this.getCopilotToken();
54
+ const body = {
55
+ model: this.model,
56
+ messages: messages.map((m) => {
57
+ const msg = {
58
+ role: m.role,
59
+ content: m.content,
60
+ };
61
+ if (m.toolCallId) {
62
+ msg.tool_call_id = m.toolCallId;
63
+ }
64
+ return msg;
65
+ }),
66
+ };
67
+ if (config?.temperature !== undefined) {
68
+ body.temperature = config.temperature;
69
+ }
70
+ if (config?.maxTokens !== undefined) {
71
+ body.max_tokens = config.maxTokens;
72
+ }
73
+ if (tools && tools.length > 0) {
74
+ body.tools = tools.map((tool) => ({
75
+ type: "function",
76
+ function: {
77
+ name: tool.name,
78
+ description: tool.description,
79
+ parameters: zodToJsonSchema(tool.inputSchema),
80
+ },
81
+ }));
82
+ }
83
+ const response = await fetch(COPILOT_CHAT_URL, {
84
+ method: "POST",
85
+ headers: {
86
+ "Content-Type": "application/json",
87
+ Authorization: `Bearer ${copilotToken}`,
88
+ "User-Agent": "GitHubCopilotChat/0.26.7",
89
+ "Editor-Version": "vscode/1.99.3",
90
+ "Editor-Plugin-Version": "copilot-chat/0.26.7",
91
+ },
92
+ body: JSON.stringify(body),
93
+ });
94
+ if (!response.ok) {
95
+ const text = await response.text();
96
+ // If 401, the token may have been invalidated server-side — clear cache
97
+ if (response.status === 401) {
98
+ this.cachedToken = null;
99
+ this.tokenExpiresAt = 0;
100
+ }
101
+ throw new Error(`Copilot API error (${response.status}): ${text}`);
102
+ }
103
+ const data = (await response.json());
104
+ const choice = data.choices[0];
105
+ if (!choice) {
106
+ throw new Error("Copilot returned empty response");
107
+ }
108
+ const toolCalls = choice.message.tool_calls?.map((tc) => ({
109
+ id: tc.id,
110
+ toolName: tc.function.name,
111
+ arguments: JSON.parse(tc.function.arguments),
112
+ }));
113
+ return {
114
+ content: choice.message.content ?? "",
115
+ toolCalls: toolCalls && toolCalls.length > 0 ? toolCalls : undefined,
116
+ };
117
+ }
118
+ }
119
+ //# sourceMappingURL=copilot-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-adapter.js","sourceRoot":"","sources":["../../src/copilot-adapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,iBAAiB,GAAG,kDAAkD,CAAC;AAC7E,MAAM,gBAAgB,GAAG,gDAAgD,CAAC;AAc1E;;;;;;;;;GASG;AACH,MAAM,OAAO,cAAc;IACjB,WAAW,CAAS;IACpB,KAAK,CAAS;IACd,WAAW,GAAkB,IAAI,CAAC;IAClC,cAAc,GAAW,CAAC,CAAC;IAEnC,YAAY,MAA4B;QACtC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC;IACxC,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,eAAe;QAC3B,uDAAuD;QACvD,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,cAAc,GAAG,EAAE,EAAE,CAAC;YACrE,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,iBAAiB,EAAE;YAC9C,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,WAAW,EAAE;gBAC3C,MAAM,EAAE,kBAAkB;gBAC1B,YAAY,EAAE,0BAA0B;gBACxC,gBAAgB,EAAE,eAAe;gBACjC,uBAAuB,EAAE,qBAAqB;aAC/C;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,mCAAmC,QAAQ,CAAC,MAAM,MAAM,IAAI,IAAI;gBAChE,8CAA8C,CAC/C,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAyB,CAAC;QAC7D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC;QAEtC,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,QAAmB,EACnB,KAAc,EACd,MAAyB;QAEzB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAElD,MAAM,IAAI,GAA4B;YACpC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC3B,MAAM,GAAG,GAA4B;oBACnC,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;iBACnB,CAAC;gBACF,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;oBACjB,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,UAAU,CAAC;gBAClC,CAAC;gBACD,OAAO,GAAG,CAAC;YACb,CAAC,CAAC;SACH,CAAC;QAEF,IAAI,MAAM,EAAE,WAAW,KAAK,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACxC,CAAC;QACD,IAAI,MAAM,EAAE,SAAS,KAAK,SAAS,EAAE,CAAC;YACpC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC;QACrC,CAAC;QAED,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAChC,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE;oBACR,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;iBAC9C;aACF,CAAC,CAAC,CAAC;QACN,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gBAAgB,EAAE;YAC7C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,YAAY,EAAE;gBACvC,YAAY,EAAE,0BAA0B;gBACxC,gBAAgB,EAAE,eAAe;gBACjC,uBAAuB,EAAE,qBAAqB;aAC/C;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEnC,wEAAwE;YACxE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;YAC1B,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAalC,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,SAAS,GAA2B,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CACtE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACP,EAAE,EAAE,EAAE,CAAC,EAAE;YACT,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;YAC1B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;SAC7C,CAAC,CACH,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE;YACrC,SAAS,EAAE,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;SACrE,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Enhanced trace logger with memory and performance tracking.
3
+ *
4
+ * Automatically captures memory statistics and performance metrics
5
+ * when logging trace entries.
6
+ *
7
+ * @module file-trace-enhanced
8
+ * @since 2.0.0
9
+ */
10
+ import type { TraceEntry, TraceLogger } from "./trace.js";
11
+ import type { TieredMemoryManager } from "./memory/tiered-memory.js";
12
+ /**
13
+ * Options for enhanced trace logger.
14
+ */
15
+ export interface EnhancedTraceOptions {
16
+ /**
17
+ * Base trace logger to wrap.
18
+ */
19
+ baseLogger: TraceLogger;
20
+ /**
21
+ * Optional memory manager for collecting memory stats.
22
+ */
23
+ memoryManager?: TieredMemoryManager;
24
+ /**
25
+ * Whether to collect memory stats on every log entry.
26
+ * Can be expensive for high-frequency logging.
27
+ * @default false
28
+ */
29
+ collectMemoryStats?: boolean;
30
+ /**
31
+ * Whether to track performance metrics.
32
+ * @default true
33
+ */
34
+ trackPerformance?: boolean;
35
+ }
36
+ /**
37
+ * Enhanced trace logger that automatically captures memory and performance data.
38
+ *
39
+ * Wraps an existing TraceLogger and enriches entries with:
40
+ * - Memory statistics from TieredMemoryManager
41
+ * - Performance timing for stage execution
42
+ * - Memory hit/miss rates
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * const baseLogger = new FileTraceLogger('trace.jsonl');
47
+ * const memory = new TieredMemoryManager();
48
+ *
49
+ * const enhancedLogger = new EnhancedTraceLogger({
50
+ * baseLogger,
51
+ * memoryManager: memory,
52
+ * collectMemoryStats: true,
53
+ * });
54
+ *
55
+ * // Log with automatic memory stats
56
+ * enhancedLogger.log({
57
+ * stageId: 'Step1',
58
+ * event: 'stage_start',
59
+ * });
60
+ * ```
61
+ *
62
+ * @since 2.0.0
63
+ */
64
+ export declare class EnhancedTraceLogger implements TraceLogger {
65
+ private baseLogger;
66
+ private memoryManager?;
67
+ private collectMemoryStats;
68
+ private trackPerformance;
69
+ private stageStartTimes;
70
+ constructor(options: EnhancedTraceOptions);
71
+ /**
72
+ * Log a trace entry with automatic enrichment.
73
+ */
74
+ log(entry: Omit<TraceEntry, "timestamp">): void;
75
+ /**
76
+ * Get all entries from base logger.
77
+ */
78
+ getEntries(): TraceEntry[];
79
+ /**
80
+ * Flush base logger.
81
+ */
82
+ flush(): Promise<void>;
83
+ /**
84
+ * Start timing a stage.
85
+ *
86
+ * Call this when stage execution begins.
87
+ *
88
+ * @param stageId - Stage identifier
89
+ */
90
+ startStage(stageId: string): void;
91
+ /**
92
+ * End timing a stage and return duration.
93
+ *
94
+ * @param stageId - Stage identifier
95
+ * @returns Duration in milliseconds, or undefined if not started
96
+ */
97
+ endStage(stageId: string): number | undefined;
98
+ /**
99
+ * Capture current memory statistics.
100
+ */
101
+ private captureMemoryStats;
102
+ /**
103
+ * Capture performance metrics based on event type.
104
+ */
105
+ private capturePerformance;
106
+ }
107
+ /**
108
+ * Helper to create an enhanced logger from an existing logger.
109
+ *
110
+ * @param baseLogger - Base trace logger
111
+ * @param memoryManager - Optional memory manager for stats
112
+ * @returns Enhanced trace logger
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * const logger = createEnhancedLogger(
117
+ * new FileTraceLogger('trace.jsonl'),
118
+ * memoryManager
119
+ * );
120
+ * ```
121
+ */
122
+ export declare function createEnhancedLogger(baseLogger: TraceLogger, memoryManager?: TieredMemoryManager): EnhancedTraceLogger;
123
+ //# sourceMappingURL=file-trace-enhanced.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-trace-enhanced.d.ts","sourceRoot":"","sources":["../../src/file-trace-enhanced.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAA6C,MAAM,YAAY,CAAC;AACrG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,UAAU,EAAE,WAAW,CAAC;IAExB;;OAEG;IACH,aAAa,CAAC,EAAE,mBAAmB,CAAC;IAEpC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IACrD,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,aAAa,CAAC,CAAsB;IAC5C,OAAO,CAAC,kBAAkB,CAAU;IACpC,OAAO,CAAC,gBAAgB,CAAU;IAClC,OAAO,CAAC,eAAe,CAAkC;gBAE7C,OAAO,EAAE,oBAAoB;IAOzC;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,IAAI;IAiB/C;;OAEG;IACH,UAAU,IAAI,UAAU,EAAE;IAI1B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;;;;;OAMG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMjC;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAe7C;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAiC3B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,WAAW,EACvB,aAAa,CAAC,EAAE,mBAAmB,GAClC,mBAAmB,CAOrB"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Enhanced trace logger with memory and performance tracking.
3
+ *
4
+ * Automatically captures memory statistics and performance metrics
5
+ * when logging trace entries.
6
+ *
7
+ * @module file-trace-enhanced
8
+ * @since 2.0.0
9
+ */
10
+ /**
11
+ * Enhanced trace logger that automatically captures memory and performance data.
12
+ *
13
+ * Wraps an existing TraceLogger and enriches entries with:
14
+ * - Memory statistics from TieredMemoryManager
15
+ * - Performance timing for stage execution
16
+ * - Memory hit/miss rates
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const baseLogger = new FileTraceLogger('trace.jsonl');
21
+ * const memory = new TieredMemoryManager();
22
+ *
23
+ * const enhancedLogger = new EnhancedTraceLogger({
24
+ * baseLogger,
25
+ * memoryManager: memory,
26
+ * collectMemoryStats: true,
27
+ * });
28
+ *
29
+ * // Log with automatic memory stats
30
+ * enhancedLogger.log({
31
+ * stageId: 'Step1',
32
+ * event: 'stage_start',
33
+ * });
34
+ * ```
35
+ *
36
+ * @since 2.0.0
37
+ */
38
+ export class EnhancedTraceLogger {
39
+ baseLogger;
40
+ memoryManager;
41
+ collectMemoryStats;
42
+ trackPerformance;
43
+ stageStartTimes = new Map();
44
+ constructor(options) {
45
+ this.baseLogger = options.baseLogger;
46
+ this.memoryManager = options.memoryManager;
47
+ this.collectMemoryStats = options.collectMemoryStats ?? false;
48
+ this.trackPerformance = options.trackPerformance ?? true;
49
+ }
50
+ /**
51
+ * Log a trace entry with automatic enrichment.
52
+ */
53
+ log(entry) {
54
+ const enriched = { ...entry };
55
+ // Collect memory stats if enabled
56
+ if (this.collectMemoryStats && this.memoryManager) {
57
+ enriched.memory = this.captureMemoryStats();
58
+ }
59
+ // Track performance timing
60
+ if (this.trackPerformance) {
61
+ enriched.performance = this.capturePerformance(entry);
62
+ }
63
+ // Log to base logger
64
+ this.baseLogger.log(enriched);
65
+ }
66
+ /**
67
+ * Get all entries from base logger.
68
+ */
69
+ getEntries() {
70
+ return this.baseLogger.getEntries();
71
+ }
72
+ /**
73
+ * Flush base logger.
74
+ */
75
+ async flush() {
76
+ return this.baseLogger.flush();
77
+ }
78
+ /**
79
+ * Start timing a stage.
80
+ *
81
+ * Call this when stage execution begins.
82
+ *
83
+ * @param stageId - Stage identifier
84
+ */
85
+ startStage(stageId) {
86
+ if (this.trackPerformance) {
87
+ this.stageStartTimes.set(stageId, Date.now());
88
+ }
89
+ }
90
+ /**
91
+ * End timing a stage and return duration.
92
+ *
93
+ * @param stageId - Stage identifier
94
+ * @returns Duration in milliseconds, or undefined if not started
95
+ */
96
+ endStage(stageId) {
97
+ if (!this.trackPerformance) {
98
+ return undefined;
99
+ }
100
+ const startTime = this.stageStartTimes.get(stageId);
101
+ if (startTime === undefined) {
102
+ return undefined;
103
+ }
104
+ const duration = Date.now() - startTime;
105
+ this.stageStartTimes.delete(stageId);
106
+ return duration;
107
+ }
108
+ /**
109
+ * Capture current memory statistics.
110
+ */
111
+ captureMemoryStats() {
112
+ if (!this.memoryManager) {
113
+ return undefined;
114
+ }
115
+ try {
116
+ // Note: stats() is async but we're calling it sync here
117
+ // In production, this would need to be awaited
118
+ // For now, return undefined if we can't get stats synchronously
119
+ return undefined;
120
+ }
121
+ catch {
122
+ return undefined;
123
+ }
124
+ }
125
+ /**
126
+ * Capture performance metrics based on event type.
127
+ */
128
+ capturePerformance(entry) {
129
+ if (!this.trackPerformance) {
130
+ return undefined;
131
+ }
132
+ const metrics = {};
133
+ // Calculate stage duration for completion/failure events
134
+ if (entry.event === "stage_complete" ||
135
+ entry.event === "stage_failed") {
136
+ const duration = this.endStage(entry.stageId);
137
+ if (duration !== undefined) {
138
+ metrics.duration = duration;
139
+ }
140
+ }
141
+ // Extract timing from data if available
142
+ if (entry.data) {
143
+ if (typeof entry.data.duration === "number") {
144
+ metrics.llmDuration = entry.data.duration;
145
+ }
146
+ if (typeof entry.data.toolDuration === "number") {
147
+ metrics.toolDuration = entry.data.toolDuration;
148
+ }
149
+ }
150
+ // Return metrics only if we have any data
151
+ return Object.keys(metrics).length > 0 ? metrics : undefined;
152
+ }
153
+ }
154
+ /**
155
+ * Helper to create an enhanced logger from an existing logger.
156
+ *
157
+ * @param baseLogger - Base trace logger
158
+ * @param memoryManager - Optional memory manager for stats
159
+ * @returns Enhanced trace logger
160
+ *
161
+ * @example
162
+ * ```typescript
163
+ * const logger = createEnhancedLogger(
164
+ * new FileTraceLogger('trace.jsonl'),
165
+ * memoryManager
166
+ * );
167
+ * ```
168
+ */
169
+ export function createEnhancedLogger(baseLogger, memoryManager) {
170
+ return new EnhancedTraceLogger({
171
+ baseLogger,
172
+ memoryManager,
173
+ collectMemoryStats: !!memoryManager,
174
+ trackPerformance: true,
175
+ });
176
+ }
177
+ //# sourceMappingURL=file-trace-enhanced.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-trace-enhanced.js","sourceRoot":"","sources":["../../src/file-trace-enhanced.ts"],"names":[],"mappings":"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"}