@xopcai/xopc 0.0.206 → 0.0.208

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 (192) hide show
  1. package/README.md +7 -7
  2. package/README.zh-CN.md +7 -7
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/telegram/xopc.extension.json +1 -1
  5. package/dist/gateway/static/root/assets/{activity-store-URW-e_me.js → activity-store-D0mYZqhc.js} +1 -1
  6. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BLK6kRCJ.js → agent-avatar-dicebear-MWLQWL_i.js} +1 -1
  7. package/dist/gateway/static/root/assets/agents-Bl8FQZxW.js +68 -0
  8. package/dist/gateway/static/root/assets/{api-C_MS4arC.js → api-DZA1yVzM.js} +1 -1
  9. package/dist/gateway/static/root/assets/app-management-settings-panel-B2X6quAF.js +1 -0
  10. package/dist/gateway/static/root/assets/appearance-settings-BZW-c38q.js +1 -0
  11. package/dist/gateway/static/root/assets/apps-page-CRUgTO10.js +1 -0
  12. package/dist/gateway/static/root/assets/{archive-plugin-C7FqeJZD.js → archive-plugin-CK-gsjsJ.js} +1 -1
  13. package/dist/gateway/static/root/assets/{attachment-load-DCYQgsYE.js → attachment-load-EJGP4rCw.js} +1 -1
  14. package/dist/gateway/static/root/assets/automations-page-DrSwolhG.js +6 -0
  15. package/dist/gateway/static/root/assets/{binary-plugins-Bf1WROsh.js → binary-plugins-Tbss_4P-.js} +1 -1
  16. package/dist/gateway/static/root/assets/{block-editor-BPK08Pjv.js → block-editor-C-dOWigw.js} +47 -47
  17. package/dist/gateway/static/root/assets/browser-settings-page-NlvDyMwD.js +8 -0
  18. package/dist/gateway/static/root/assets/{browser-workflow-inputs-cqVoDHyp.js → browser-workflow-inputs-DW06Zo1N.js} +1 -1
  19. package/dist/gateway/static/root/assets/{browser-workflows-page-Des1UTsS.js → browser-workflows-page-B6RnRGwm.js} +2 -2
  20. package/dist/gateway/static/root/assets/capabilities-settings-panel-BWXUznw5.js +7 -0
  21. package/dist/gateway/static/root/assets/{capability-presets-api-D4MjqV2a.js → capability-presets-api-Cc3BtQar.js} +1 -1
  22. package/dist/gateway/static/root/assets/capability-presets-settings-panel-D0loEbzq.js +3 -0
  23. package/dist/gateway/static/root/assets/{channel-recipient-api-CcimZduy.js → channel-recipient-api-BvZO5FaO.js} +1 -1
  24. package/dist/gateway/static/root/assets/channels-settings-CcivCw8U.js +1 -0
  25. package/dist/gateway/static/root/assets/channels-status-swr-DkHAD2Zn.js +1 -0
  26. package/dist/gateway/static/root/assets/chat-terminal-dock-DVedGAeX.js +36 -0
  27. package/dist/gateway/static/root/assets/{chat-terminal-dock-B1njb2Cr.css → chat-terminal-dock-uQUnjRtf.css} +1 -1
  28. package/dist/gateway/static/root/assets/{connectors-api-CUvFu8jh.js → connectors-api-CUl6_EQJ.js} +1 -1
  29. package/dist/gateway/static/root/assets/connectors-page-DlBSlfkv.js +2 -0
  30. package/dist/gateway/static/root/assets/{cron-expression-hFSZZpvM.js → cron-expression-BD9MgoE_.js} +1 -1
  31. package/dist/gateway/static/root/assets/{date-picker-CKZ0gc-Y.js → date-picker-ChqNmoxw.js} +1 -1
  32. package/dist/gateway/static/root/assets/{dependency-picker-zv1oHtg4.js → dependency-picker-CDUmFs6H.js} +1 -1
  33. package/dist/gateway/static/root/assets/{desktop-pet-DY9ykMtD.js → desktop-pet-D61gqxaD.js} +1 -1
  34. package/dist/gateway/static/root/assets/desktop-pet-settings-QvuJvIX_.js +1 -0
  35. package/dist/gateway/static/root/assets/directory-picker-path-field-DvXMvDNY.js +1 -0
  36. package/dist/gateway/static/root/assets/{extension-debug-page-CTppsTEi.js → extension-debug-page-DMdVTAQ3.js} +1 -1
  37. package/dist/gateway/static/root/assets/{extension-page-CHRTUvAa.js → extension-page-BNzxZtaK.js} +1 -1
  38. package/dist/gateway/static/root/assets/extension-settings-page-DoEfyizU.js +1 -0
  39. package/dist/gateway/static/root/assets/{gateway-config-api-DzFPJTnm.js → gateway-config-api-o7AKvthC.js} +1 -1
  40. package/dist/gateway/static/root/assets/{gateway-config-swr-CGpoH1gU.js → gateway-config-swr-BQbkUP5X.js} +1 -1
  41. package/dist/gateway/static/root/assets/gateway-settings-TO5YYZ9a.js +1 -0
  42. package/dist/gateway/static/root/assets/{gateway-startup-retry-Te-TREBt.js → gateway-startup-retry-DIgdpHgk.js} +1 -1
  43. package/dist/gateway/static/root/assets/heartbeat-settings-UZAn1aAQ.js +1 -0
  44. package/dist/gateway/static/root/assets/home-page-CRJDpy5E.js +3 -0
  45. package/dist/gateway/static/root/assets/index-BSjP0Wsx.css +2 -0
  46. package/dist/gateway/static/root/assets/index-C2ZYFBGL.js +85 -0
  47. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-fb0zS8pk.js → keyboard-shortcuts-settings-4xaM3jjU.js} +1 -1
  48. package/dist/gateway/static/root/assets/local-app-workbench-page-D9bguWRo.js +2 -0
  49. package/dist/gateway/static/root/assets/{local-apps-page-DFdheruU.js → local-apps-page-C1xDicdr.js} +1 -1
  50. package/dist/gateway/static/root/assets/{locale-store-CieddUjx.js → locale-store-pByvK12G.js} +1 -1
  51. package/dist/gateway/static/root/assets/logs-page-Gr-nE4nW.js +2 -0
  52. package/dist/gateway/static/root/assets/{management-settings-D3PsQ612.js → management-settings-D1XdHm7v.js} +1 -1
  53. package/dist/gateway/static/root/assets/{markdown-split-x5K52Thz.js → markdown-split-B_Ijq1Fr.js} +1 -1
  54. package/dist/gateway/static/root/assets/{markdown-view-Cjjey5Y6.js → markdown-view-CyJlGUxB.js} +1 -1
  55. package/dist/gateway/static/root/assets/{media-plugins-DNtEkRAh.js → media-plugins-CXXNRROJ.js} +1 -1
  56. package/dist/gateway/static/root/assets/messages-yG5P43Q9.js +3 -0
  57. package/dist/gateway/static/root/assets/{notes-page-nWEqlwDw.js → notes-page-rkePB4CB.js} +1 -1
  58. package/dist/gateway/static/root/assets/notes-workbench-CpbD4XG2.js +4 -0
  59. package/dist/gateway/static/root/assets/page-tabs-gw-RMQCV.js +1 -0
  60. package/dist/gateway/static/root/assets/preview-open-alternatives-B8aMScJ2.js +1 -0
  61. package/dist/gateway/static/root/assets/{product-open-page-CZLJudPk.js → product-open-page-CjcpkWAz.js} +1 -1
  62. package/dist/gateway/static/root/assets/project-detail-page-GvSYDbjR.js +1 -0
  63. package/dist/gateway/static/root/assets/projects-page-DPRxKGbs.js +1 -0
  64. package/dist/gateway/static/root/assets/remote-access-hub-WIzeu-gB.js +1 -0
  65. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-RYjduQV6.js → runtime-tools-settings-panel-Ch5qq86o.js} +2 -2
  66. package/dist/gateway/static/root/assets/{schema-form--1ZXg4qC.js → schema-form-DHYWYUFt.js} +1 -1
  67. package/dist/gateway/static/root/assets/sessions-page-2XEJM0YE.js +1 -0
  68. package/dist/gateway/static/root/assets/settings-advanced-gate-g1GThZ0O.js +1 -0
  69. package/dist/gateway/static/root/assets/settings-form-section-DlzZx0-i.js +1 -0
  70. package/dist/gateway/static/root/assets/{settings-loading-skeleton-C5Jn1l0q.js → settings-loading-skeleton-BVLhreQi.js} +1 -1
  71. package/dist/gateway/static/root/assets/{settings-page-TYYGe6kZ.js → settings-page-BJU-kUnN.js} +1 -1
  72. package/dist/gateway/static/root/assets/setup-status-panel-C6qj2L-q.js +1 -0
  73. package/dist/gateway/static/root/assets/{share-preview-page-BMUQIGfk.js → share-preview-page-hvIuZXMe.js} +1 -1
  74. package/dist/gateway/static/root/assets/shares-settings-BBpE1bep.js +1 -0
  75. package/dist/gateway/static/root/assets/skill-reload-api-DXORBJNk.js +1 -0
  76. package/dist/gateway/static/root/assets/skills-page-Dlvuh7D-.js +2 -0
  77. package/dist/gateway/static/root/assets/{skills-page.utils-DnaBw5Ji.js → skills-page.utils-B6ddOpnf.js} +1 -1
  78. package/dist/gateway/static/root/assets/system-settings-panel-BdbCAyoA.js +1 -0
  79. package/dist/gateway/static/root/assets/task-detail-page-DC0hc8hp.js +1 -0
  80. package/dist/gateway/static/root/assets/{theme-store-BP3_RpaY.js → theme-store-BtdGacMI.js} +1 -1
  81. package/dist/gateway/static/root/assets/typed-models-lib-CL6qHYJA.js +1 -0
  82. package/dist/gateway/static/root/assets/{use-autosave-BJkQ-vpu.js → use-autosave-DysNnqCS.js} +1 -1
  83. package/dist/gateway/static/root/assets/user-context-page-Bwg4KV8B.js +1 -0
  84. package/dist/gateway/static/root/assets/{voice-api-key-field-C6c8e7Mx.js → voice-api-key-field-UEsO9Jr-.js} +1 -1
  85. package/dist/gateway/static/root/assets/{work-discovery-overlay-CCNjWKql.js → work-discovery-overlay-B9disASf.js} +1 -1
  86. package/dist/gateway/static/root/assets/work-discovery-page-CmPfOfHl.js +1 -0
  87. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-DLO-dMSN.js → workflow-run-setup-panel-A0zTQHFQ.js} +2 -2
  88. package/dist/gateway/static/root/assets/workflows-page-DhQNh7W6.js +5 -0
  89. package/dist/gateway/static/root/index.html +11 -15
  90. package/dist/package.js +1 -1
  91. package/dist/src/agent/embedded/transcript-runtime.d.ts +2 -1
  92. package/dist/src/agent/embedded/transcript-runtime.js +38 -4
  93. package/dist/src/agent/inbound/inbound-loop.d.ts +1 -1
  94. package/dist/src/agent/memory/compaction-ledger.d.ts +11 -0
  95. package/dist/src/agent/memory/compaction-ledger.js +108 -0
  96. package/dist/src/agent/memory/compaction-serializer.d.ts +2 -0
  97. package/dist/src/agent/memory/compaction-serializer.js +52 -0
  98. package/dist/src/agent/memory/compaction-source-planner.d.ts +20 -0
  99. package/dist/src/agent/memory/compaction-source-planner.js +67 -0
  100. package/dist/src/agent/memory/compaction.d.ts +11 -5
  101. package/dist/src/agent/memory/compaction.js +245 -153
  102. package/dist/src/agent/prompt/sections/behavior.js +1 -1
  103. package/dist/src/agent/prompt/sections/memory-skills.js +4 -2
  104. package/dist/src/agent/prompt/sections/tooling.js +2 -0
  105. package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
  106. package/dist/src/agent/tool-manuals/xopc-use.js +1 -1
  107. package/dist/src/agent/tools/factory.js +5 -0
  108. package/dist/src/agent/tools/index.d.ts +1 -0
  109. package/dist/src/agent/tools/index.js +2 -1
  110. package/dist/src/agent/tools/session-recall-tool.d.ts +7 -0
  111. package/dist/src/agent/tools/session-recall-tool.js +82 -0
  112. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  113. package/dist/src/config/agent-profile.js +1 -1
  114. package/dist/src/config/schema.d.ts +1 -0
  115. package/dist/src/gateway/agents-admin.js +1 -1
  116. package/dist/src/gateway/hono/lib/config-payload.d.ts +1 -0
  117. package/dist/src/gateway/service/run-gateway-agent.js +3 -3
  118. package/dist/src/session/compaction-types.d.ts +30 -0
  119. package/dist/src/session/compaction-types.js +35 -0
  120. package/dist/src/session/manager.d.ts +3 -0
  121. package/dist/src/session/session-context-for-llm.d.ts +4 -2
  122. package/dist/src/session/session-context-for-llm.js +2 -1
  123. package/dist/src/session/store.d.ts +10 -1
  124. package/dist/src/session/store.js +55 -23
  125. package/dist/src/session/types.d.ts +3 -2
  126. package/dist/src/storage/sqlite/index.d.ts +1 -1
  127. package/dist/src/storage/sqlite/index.js +2 -2
  128. package/dist/src/storage/sqlite/migrations/123_remove_v2_compaction_boundaries.sql +25 -0
  129. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  130. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  131. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  132. package/dist/src/storage/sqlite/schema.js +1 -1
  133. package/dist/src/storage/sqlite/transcript-repository.d.ts +24 -1
  134. package/dist/src/storage/sqlite/transcript-repository.js +78 -29
  135. package/dist/src/user-context/config.d.ts +4 -0
  136. package/dist/src/user-context/config.js +2 -0
  137. package/package.json +4 -4
  138. package/skills/THIRD_PARTY_NOTICES.md +1 -1
  139. package/skills/engineering/define-task/SKILL.md +48 -0
  140. package/skills/engineering/define-task/references/task-contract-rubric.md +15 -0
  141. package/dist/gateway/static/root/assets/agents-D5HVmdNx.js +0 -68
  142. package/dist/gateway/static/root/assets/app-management-settings-panel-CnUN6BJk.js +0 -1
  143. package/dist/gateway/static/root/assets/appearance-settings-C8Nx8hZE.js +0 -1
  144. package/dist/gateway/static/root/assets/apps-page-DKCA_LFY.js +0 -1
  145. package/dist/gateway/static/root/assets/automations-page-BEOE4ZKM.js +0 -6
  146. package/dist/gateway/static/root/assets/browser-settings-page-CLRmMdU9.js +0 -8
  147. package/dist/gateway/static/root/assets/capabilities-settings-panel-BNcVi4ar.js +0 -7
  148. package/dist/gateway/static/root/assets/capability-presets-settings-panel-uFwW2ah5.js +0 -3
  149. package/dist/gateway/static/root/assets/channels-settings-DSLP8OjS.js +0 -1
  150. package/dist/gateway/static/root/assets/channels-status-swr-D0OR6Ylw.js +0 -1
  151. package/dist/gateway/static/root/assets/chat-terminal-dock-wpi7abPg.js +0 -38
  152. package/dist/gateway/static/root/assets/connectors-page-BJoHjWnu.js +0 -2
  153. package/dist/gateway/static/root/assets/desktop-pet-settings-XiSmmt26.js +0 -1
  154. package/dist/gateway/static/root/assets/directory-picker-path-field-CZkgk15r.js +0 -1
  155. package/dist/gateway/static/root/assets/extension-settings-page-z2UBx25A.js +0 -1
  156. package/dist/gateway/static/root/assets/form-field-width-DJw_jULe.js +0 -1
  157. package/dist/gateway/static/root/assets/gateway-settings-DBa2I6VM.js +0 -1
  158. package/dist/gateway/static/root/assets/heartbeat-settings-DyQGGdBu.js +0 -1
  159. package/dist/gateway/static/root/assets/home-page-EkT4eGeP.js +0 -3
  160. package/dist/gateway/static/root/assets/index-BpLqHdfz.css +0 -2
  161. package/dist/gateway/static/root/assets/index-CrwXzRpA.js +0 -85
  162. package/dist/gateway/static/root/assets/interaction-BmQogeqz.js +0 -1
  163. package/dist/gateway/static/root/assets/local-app-workbench-page-CCC3Cvb8.js +0 -2
  164. package/dist/gateway/static/root/assets/logs-page-B6jfkNDF.js +0 -2
  165. package/dist/gateway/static/root/assets/messages-CySMn8WL.js +0 -3
  166. package/dist/gateway/static/root/assets/notes-workbench-QstkgWsW.js +0 -4
  167. package/dist/gateway/static/root/assets/page-tabs-BaEQMYm_.js +0 -1
  168. package/dist/gateway/static/root/assets/preview-open-alternatives-CXcIKVi9.js +0 -1
  169. package/dist/gateway/static/root/assets/project-detail-page-Cf1v94LO.js +0 -1
  170. package/dist/gateway/static/root/assets/projects-page-BRMZkNht.js +0 -1
  171. package/dist/gateway/static/root/assets/remote-access-hub-D55FTXZw.js +0 -1
  172. package/dist/gateway/static/root/assets/sessions-page-C5Yy6eIn.js +0 -1
  173. package/dist/gateway/static/root/assets/settings-advanced-gate-BqO_8bUh.js +0 -1
  174. package/dist/gateway/static/root/assets/settings-form-draft-Dy10ldo8.js +0 -1
  175. package/dist/gateway/static/root/assets/settings-form-section-71-8j3zt.js +0 -1
  176. package/dist/gateway/static/root/assets/setup-status-panel-jA5I-17g.js +0 -1
  177. package/dist/gateway/static/root/assets/shares-settings-Dru1a2rZ.js +0 -1
  178. package/dist/gateway/static/root/assets/skill-reload-api-C8iqS6kF.js +0 -1
  179. package/dist/gateway/static/root/assets/skills-page-BzZT1SKg.js +0 -2
  180. package/dist/gateway/static/root/assets/system-settings-panel-DqiPQgVI.js +0 -1
  181. package/dist/gateway/static/root/assets/task-detail-page-DQP5vDr-.js +0 -1
  182. package/dist/gateway/static/root/assets/typed-models-lib-q5-Vfqd8.js +0 -1
  183. package/dist/gateway/static/root/assets/user-context-page-BP8-sOPi.js +0 -1
  184. package/dist/gateway/static/root/assets/work-discovery-page-DL_Ie0s2.js +0 -1
  185. package/dist/gateway/static/root/assets/workflows-page-B4-k2FHB.js +0 -5
  186. package/dist/gateway/static/root/assets/working-directory-picker-modal-vWi33CZJ.js +0 -1
  187. package/dist/src/agent/memory/compaction-planner.d.ts +0 -16
  188. package/dist/src/agent/memory/compaction-planner.js +0 -168
  189. package/dist/src/agent/memory/summary-generator.d.ts +0 -46
  190. package/dist/src/agent/memory/summary-generator.js +0 -229
  191. package/skills/engineering/define-goal/SKILL.md +0 -41
  192. package/skills/engineering/define-goal/references/objective-rubric.md +0 -12
@@ -1,229 +0,0 @@
1
- import { createLogger } from "../../utils/logger/index.js";
2
- import { init_logger } from "../../utils/logger.js";
3
- import { readAgentMessageContent } from "./agent-message-access.js";
4
- //#region src/agent/memory/summary-generator.ts
5
- init_logger();
6
- const log = createLogger("SummaryGenerator");
7
- const DEFAULT_OPTIONS = {
8
- maxUserRequests: 10,
9
- maxToolCalls: 50,
10
- deduplicateByFile: true,
11
- includeUsage: true
12
- };
13
- /**
14
- * Categorize tool operation based on tool name
15
- */
16
- function categorizeToolOperation(toolName) {
17
- const name = toolName.toLowerCase();
18
- if ([
19
- "read",
20
- "read_file",
21
- "read_multiple",
22
- "glob",
23
- "list_dir",
24
- "ls",
25
- "memory_get"
26
- ].some((n) => name.includes(n))) return "read";
27
- if ([
28
- "write",
29
- "write_file",
30
- "write_multiple",
31
- "edit",
32
- "patch",
33
- "create",
34
- "mkdir"
35
- ].some((n) => name.includes(n))) return "write";
36
- if ([
37
- "grep",
38
- "search",
39
- "find",
40
- "find_files",
41
- "memory_search",
42
- "web_search"
43
- ].some((n) => name.includes(n))) return "search";
44
- if ([
45
- "bash",
46
- "exec",
47
- "run",
48
- "command"
49
- ].some((n) => name.includes(n))) return "command";
50
- return "other";
51
- }
52
- /**
53
- * Extract text content from message
54
- */
55
- function extractTextContent(content) {
56
- if (typeof content === "string") return content;
57
- if (Array.isArray(content)) return content.filter((c) => c.type === "text").map((c) => c.text || "").join("\n");
58
- return "";
59
- }
60
- /**
61
- * Type guard: Check if message has tool calls (assistant message)
62
- */
63
- function hasToolCalls(msg) {
64
- return msg.role === "assistant" && "toolCalls" in msg;
65
- }
66
- /**
67
- * Type guard: Check if message is a tool result
68
- */
69
- function isToolResult(msg) {
70
- return msg.role === "toolResult" && "name" in msg;
71
- }
72
- /**
73
- * Deduplicate tool calls by file path (keep last operation per file)
74
- */
75
- function deduplicateByFilePath(toolCalls) {
76
- const byFile = /* @__PURE__ */ new Map();
77
- const otherCalls = [];
78
- for (const call of toolCalls) if (call.filePath) byFile.set(call.filePath, call);
79
- else otherCalls.push(call);
80
- return [...Array.from(byFile.values()), ...otherCalls];
81
- }
82
- /**
83
- * Generate structured summary from messages
84
- */
85
- function generateStructuredSummary(messages, options = {}) {
86
- const opts = {
87
- ...DEFAULT_OPTIONS,
88
- ...options
89
- };
90
- const summary = {
91
- userRequests: [],
92
- toolCalls: [],
93
- keyDecisions: [],
94
- filesModified: [],
95
- totalToolCalls: 0,
96
- successfulToolCalls: 0,
97
- failedToolCalls: 0
98
- };
99
- let lastAssistantMessage = null;
100
- for (const msg of messages) {
101
- if (msg.role === "user") {
102
- const text = extractTextContent(readAgentMessageContent(msg));
103
- if (text.trim().length > 20) summary.userRequests.push(text.slice(0, 500));
104
- }
105
- if (hasToolCalls(msg)) {
106
- lastAssistantMessage = msg;
107
- const toolCalls = msg.toolCalls;
108
- if (toolCalls && toolCalls.length > 0) {
109
- summary.totalToolCalls += toolCalls.length;
110
- for (const call of toolCalls) {
111
- const toolSummary = {
112
- toolName: call.name,
113
- operation: categorizeToolOperation(call.name),
114
- success: true,
115
- filePath: String(call.args?.path || call.args?.file_path || call.args?.filePath || ""),
116
- timestamp: msg.timestamp
117
- };
118
- summary.toolCalls.push(toolSummary);
119
- if (["write", "edit"].includes(toolSummary.operation) && toolSummary.filePath) summary.filesModified.push(toolSummary.filePath);
120
- }
121
- }
122
- }
123
- if (isToolResult(msg)) {
124
- const toolMsg = msg;
125
- const toolName = toolMsg.toolName;
126
- const toolCall = summary.toolCalls.slice().reverse().find((tc) => tc.toolName === toolName && !tc.timestamp);
127
- if (toolCall) {
128
- const resultText = extractTextContent(readAgentMessageContent(toolMsg));
129
- const isError = resultText.toLowerCase().includes("error") || resultText.toLowerCase().includes("failed") || resultText.startsWith("Error:");
130
- toolCall.success = !isError;
131
- toolCall.briefResult = resultText.slice(0, 200);
132
- if (isError) summary.failedToolCalls++;
133
- else summary.successfulToolCalls++;
134
- }
135
- }
136
- }
137
- if (opts.deduplicateByFile) summary.toolCalls = deduplicateByFilePath(summary.toolCalls);
138
- if (summary.toolCalls.length > opts.maxToolCalls) summary.toolCalls = summary.toolCalls.slice(-opts.maxToolCalls);
139
- if (summary.userRequests.length > opts.maxUserRequests) summary.userRequests = summary.userRequests.slice(-opts.maxUserRequests);
140
- summary.filesModified = [...new Set(summary.filesModified)];
141
- if (lastAssistantMessage) summary.keyDecisions = extractKeyDecisions(lastAssistantMessage);
142
- log.debug({
143
- userRequests: summary.userRequests.length,
144
- toolCalls: summary.toolCalls.length,
145
- filesModified: summary.filesModified.length,
146
- totalToolCalls: summary.totalToolCalls,
147
- successfulToolCalls: summary.successfulToolCalls,
148
- failedToolCalls: summary.failedToolCalls
149
- }, "Generated structured summary");
150
- return summary;
151
- }
152
- /**
153
- * Extract key decisions from assistant message
154
- */
155
- function extractKeyDecisions(msg) {
156
- const content = extractTextContent(readAgentMessageContent(msg));
157
- const decisions = [];
158
- for (const pattern of [
159
- /(?:I'll|I will|Let's|We should|Decision:|Decided to|Chose to)\s+(.+?)(?:\.|\n)/gi,
160
- /(?:Based on|After analyzing|Given that)\s+(.+?)(?:\.|\n)/gi,
161
- /(?:The best approach|The solution|The answer) is\s+(.+?)(?:\.|\n)/gi
162
- ]) {
163
- const matches = content.match(pattern);
164
- if (matches) decisions.push(...matches.slice(0, 5).map((m) => m.trim()));
165
- }
166
- return decisions.slice(0, 10);
167
- }
168
- /**
169
- * Format structured summary as text for injection into context
170
- */
171
- function formatSummaryAsText(summary, includeUsage = true) {
172
- const lines = [];
173
- lines.push("[Previous Conversation Summary]");
174
- if (summary.userRequests.length > 0) {
175
- lines.push("");
176
- lines.push("User Requests:");
177
- for (const req of summary.userRequests.slice(-5)) lines.push(` - ${req.slice(0, 150)}${req.length > 150 ? "..." : ""}`);
178
- }
179
- if (summary.toolCalls.length > 0) {
180
- lines.push("");
181
- lines.push("Tool Operations:");
182
- const byType = /* @__PURE__ */ new Map();
183
- for (const call of summary.toolCalls) {
184
- const list = byType.get(call.operation) || [];
185
- list.push(call);
186
- byType.set(call.operation, list);
187
- }
188
- for (const [type, calls] of byType.entries()) {
189
- const files = calls.filter((c) => c.filePath).map((c) => c.filePath);
190
- const successCount = calls.filter((c) => c.success).length;
191
- lines.push(` ${type.toUpperCase()}: ${calls.length} operations (${successCount}/${calls.length} successful)`);
192
- if (files.length > 0) lines.push(` Files: ${files.slice(0, 10).join(", ")}${files.length > 10 ? "..." : ""}`);
193
- }
194
- }
195
- if (summary.filesModified.length > 0) {
196
- lines.push("");
197
- lines.push("Files Modified:");
198
- for (const file of summary.filesModified.slice(-10)) lines.push(` - ${file}`);
199
- }
200
- if (summary.keyDecisions.length > 0) {
201
- lines.push("");
202
- lines.push("Key Decisions:");
203
- for (const decision of summary.keyDecisions.slice(-5)) lines.push(` - ${decision}`);
204
- }
205
- if (includeUsage) {
206
- lines.push("");
207
- lines.push("Statistics:");
208
- lines.push(` Total tool calls: ${summary.totalToolCalls}`);
209
- lines.push(` Successful: ${summary.successfulToolCalls}`);
210
- lines.push(` Failed: ${summary.failedToolCalls}`);
211
- lines.push(` Files modified: ${summary.filesModified.length}`);
212
- }
213
- return lines.join("\n");
214
- }
215
- /**
216
- * Generate compact summary message for context injection
217
- */
218
- function createSummaryMessage(summary) {
219
- return {
220
- role: "user",
221
- content: [{
222
- type: "text",
223
- text: formatSummaryAsText(summary, true)
224
- }],
225
- timestamp: Date.now()
226
- };
227
- }
228
- //#endregion
229
- export { createSummaryMessage, formatSummaryAsText, generateStructuredSummary };
@@ -1,41 +0,0 @@
1
- ---
2
- name: define-goal
3
- description: Turn an explicitly requested goal into a concise, measurable objective with verifiable completion evidence.
4
- metadata:
5
- xopc:
6
- emoji: "🎯"
7
- ---
8
-
9
- # Goal definition
10
-
11
- Use this skill only when the user explicitly asks to define, create, or refine a persistent goal.
12
- Do ordinary implementation work directly; do not create a goal merely because a task has several steps.
13
-
14
- ## Shape a usable objective
15
-
16
- State the desired outcome, the affected artifact or behaviour, the evidence that will prove success,
17
- and any material scope boundary. Prefer an observable threshold over activity wording.
18
-
19
- Good objectives name a result and a check:
20
-
21
- > Deliver the requested export change in `src/export/`, keep all existing formats compatible, and
22
- > verify it with the targeted export tests and a generated sample file.
23
-
24
- Avoid objectives such as “make progress” or “investigate this”; turn them into a bounded decision,
25
- reproduction, fix, or written finding.
26
-
27
- ## Create safely
28
-
29
- 1. Use available repository and conversation context to make the objective concrete.
30
- 2. Ask one concise question only when a missing outcome, metric, or scope limit would change the
31
- work materially.
32
- 3. Check the current goal state before creating another one. Continue a matching active goal rather
33
- than duplicating it.
34
- 4. Create a persistent goal only after the user asked for one and the objective is verifiable.
35
- 5. Include a token budget only when the user requested one.
36
-
37
- For bugs, define a reproducer and a passing regression check. For performance work, name the metric,
38
- threshold, method, and run count. For research, name the decision the research must enable and the
39
- evidence standard.
40
-
41
- For a compact review checklist, read `references/objective-rubric.md`.
@@ -1,12 +0,0 @@
1
- # Define-goal objective rubric
2
-
3
- Review a goal against these questions before creating it:
4
-
5
- 1. What will be observably true at completion?
6
- 2. Which artifact, service, workflow, or user experience is in scope?
7
- 3. What exact evidence proves success?
8
- 4. Which boundary prevents unrelated work from expanding the goal?
9
- 5. What missing information should stop execution and trigger a question?
10
-
11
- Use binary evidence when possible: a test passes, an artifact exists, a report contains a decision,
12
- or a reviewer accepts named criteria.