@goondan/openharness-base 0.0.1-alpha3 → 0.0.1-alpha5

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 (105) hide show
  1. package/dist/index.d.ts +72 -5
  2. package/dist/index.js +506 -5
  3. package/package.json +11 -33
  4. package/src/__tests__/compaction-summarize.test.ts +234 -0
  5. package/src/__tests__/context-message.test.ts +203 -0
  6. package/src/__tests__/logging.test.ts +200 -0
  7. package/src/__tests__/message-window.test.ts +193 -0
  8. package/src/__tests__/required-tools-guard.test.ts +206 -0
  9. package/src/__tests__/tool-search.test.ts +187 -0
  10. package/src/__tests__/tools.test.ts +332 -0
  11. package/src/extensions/compaction-summarize.ts +58 -0
  12. package/src/extensions/context-message.ts +37 -0
  13. package/src/extensions/logging.ts +42 -0
  14. package/src/extensions/message-window.ts +23 -0
  15. package/src/extensions/required-tools-guard.ts +24 -0
  16. package/src/extensions/tool-search.ts +38 -0
  17. package/src/index.ts +16 -0
  18. package/src/tools/bash.ts +38 -0
  19. package/src/tools/file-system.ts +83 -0
  20. package/src/tools/http-fetch.ts +64 -0
  21. package/src/tools/json-query.ts +71 -0
  22. package/src/tools/text-transform.ts +59 -0
  23. package/src/tools/wait.ts +46 -0
  24. package/tsconfig.json +8 -0
  25. package/vitest.config.ts +7 -0
  26. package/README.md +0 -11
  27. package/dist/extensions/compaction.d.ts +0 -12
  28. package/dist/extensions/compaction.d.ts.map +0 -1
  29. package/dist/extensions/compaction.js +0 -162
  30. package/dist/extensions/compaction.js.map +0 -1
  31. package/dist/extensions/context-message.d.ts +0 -9
  32. package/dist/extensions/context-message.d.ts.map +0 -1
  33. package/dist/extensions/context-message.js +0 -451
  34. package/dist/extensions/context-message.js.map +0 -1
  35. package/dist/extensions/index.d.ts +0 -13
  36. package/dist/extensions/index.d.ts.map +0 -1
  37. package/dist/extensions/index.js +0 -7
  38. package/dist/extensions/index.js.map +0 -1
  39. package/dist/extensions/logging.d.ts +0 -11
  40. package/dist/extensions/logging.d.ts.map +0 -1
  41. package/dist/extensions/logging.js +0 -140
  42. package/dist/extensions/logging.js.map +0 -1
  43. package/dist/extensions/message-integrity.d.ts +0 -8
  44. package/dist/extensions/message-integrity.d.ts.map +0 -1
  45. package/dist/extensions/message-integrity.js +0 -88
  46. package/dist/extensions/message-integrity.js.map +0 -1
  47. package/dist/extensions/message-window.d.ts +0 -7
  48. package/dist/extensions/message-window.d.ts.map +0 -1
  49. package/dist/extensions/message-window.js +0 -60
  50. package/dist/extensions/message-window.js.map +0 -1
  51. package/dist/extensions/required-tools-guard.d.ts +0 -9
  52. package/dist/extensions/required-tools-guard.d.ts.map +0 -1
  53. package/dist/extensions/required-tools-guard.js +0 -74
  54. package/dist/extensions/required-tools-guard.js.map +0 -1
  55. package/dist/extensions/tool-search.d.ts +0 -10
  56. package/dist/extensions/tool-search.d.ts.map +0 -1
  57. package/dist/extensions/tool-search.js +0 -198
  58. package/dist/extensions/tool-search.js.map +0 -1
  59. package/dist/harness.yaml +0 -503
  60. package/dist/index.d.ts.map +0 -1
  61. package/dist/index.js.map +0 -1
  62. package/dist/manifests/base.d.ts +0 -8
  63. package/dist/manifests/base.d.ts.map +0 -1
  64. package/dist/manifests/base.js +0 -352
  65. package/dist/manifests/base.js.map +0 -1
  66. package/dist/manifests/index.d.ts +0 -3
  67. package/dist/manifests/index.d.ts.map +0 -1
  68. package/dist/manifests/index.js +0 -2
  69. package/dist/manifests/index.js.map +0 -1
  70. package/dist/tools/bash.d.ts +0 -8
  71. package/dist/tools/bash.d.ts.map +0 -1
  72. package/dist/tools/bash.js +0 -119
  73. package/dist/tools/bash.js.map +0 -1
  74. package/dist/tools/file-system.d.ts +0 -12
  75. package/dist/tools/file-system.d.ts.map +0 -1
  76. package/dist/tools/file-system.js +0 -117
  77. package/dist/tools/file-system.js.map +0 -1
  78. package/dist/tools/http-fetch.d.ts +0 -8
  79. package/dist/tools/http-fetch.d.ts.map +0 -1
  80. package/dist/tools/http-fetch.js +0 -149
  81. package/dist/tools/http-fetch.js.map +0 -1
  82. package/dist/tools/index.d.ts +0 -7
  83. package/dist/tools/index.d.ts.map +0 -1
  84. package/dist/tools/index.js +0 -7
  85. package/dist/tools/index.js.map +0 -1
  86. package/dist/tools/json-query.d.ts +0 -12
  87. package/dist/tools/json-query.d.ts.map +0 -1
  88. package/dist/tools/json-query.js +0 -176
  89. package/dist/tools/json-query.js.map +0 -1
  90. package/dist/tools/text-transform.d.ts +0 -16
  91. package/dist/tools/text-transform.d.ts.map +0 -1
  92. package/dist/tools/text-transform.js +0 -127
  93. package/dist/tools/text-transform.js.map +0 -1
  94. package/dist/tools/wait.d.ts +0 -6
  95. package/dist/tools/wait.d.ts.map +0 -1
  96. package/dist/tools/wait.js +0 -32
  97. package/dist/tools/wait.js.map +0 -1
  98. package/dist/types.d.ts +0 -4
  99. package/dist/types.d.ts.map +0 -1
  100. package/dist/types.js +0 -6
  101. package/dist/types.js.map +0 -1
  102. package/dist/utils.d.ts +0 -17
  103. package/dist/utils.d.ts.map +0 -1
  104. package/dist/utils.js +0 -155
  105. package/dist/utils.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/extensions/logging.ts"],"names":[],"mappings":"AAeA,MAAM,gBAAgB,GAA6B;IACjD,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;CACV,CAAC;AAEF,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,SAAS,CAAC,OAAiB,EAAE,KAAe;IACnD,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,aAAa,CAAC,GAA0B;IAC/C,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,IAAI;KAC/B,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,GAA8B;IACnD,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,GAAiB,EACjB,SAAiC,EAAE;IAEnC,MAAM,KAAK,GAAa,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC;IAC/C,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,KAAK,CAAC;IACxD,MAAM,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,IAAI,IAAI,CAAC;IAE/D,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;YAC7B,IAAI,mBAAmB,EAAE,CAAC;gBACxB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;gBAC7B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;oBACzC,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBAClC,YAAY,EAAE,MAAM,CAAC,YAAY;iBAClC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC9B,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;oBACxC,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBAClC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC;iBAC7B,CAAC,CAAC;YACL,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;YAC7B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;gBACtC,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,MAAM;aACpC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;gBAC7B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;oBACzC,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBAClC,cAAc,EAAE,MAAM,CAAC,cAAc;iBACtC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC9B,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;oBACxC,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBAClC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC;iBAC7B,CAAC,CAAC;YACL,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;YAC9B,IAAI,eAAe,EAAE,CAAC;gBACpB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE;oBAC3C,GAAG,aAAa,CAAC,GAAG,CAAC;oBACrB,IAAI,EAAE,GAAG,CAAC,IAAI;iBACf,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC9B,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;oBAC9C,GAAG,aAAa,CAAC,GAAG,CAAC;oBACrB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBAClC,MAAM,EAAE,MAAM,CAAC,MAAM;iBACtB,CAAC,CAAC;YACL,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC9B,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE;oBAC5C,GAAG,aAAa,CAAC,GAAG,CAAC;oBACrB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBAClC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC;iBAC7B,CAAC,CAAC;YACL,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAiB,EAAE,MAA+B;IACzE,wBAAwB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC"}
@@ -1,8 +0,0 @@
1
- import type { Message } from '../types.js';
2
- /**
3
- * Removes messages that would leave invalid tool_result references after trimming.
4
- * Anthropic requires every tool_result block to map to a tool_use/tool-call block
5
- * in the immediately previous assistant message.
6
- */
7
- export declare function normalizeRemovalTargets(messages: Message[], initialRemovedIds: ReadonlySet<string>): Set<string>;
8
- //# sourceMappingURL=message-integrity.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"message-integrity.d.ts","sourceRoot":"","sources":["../../src/extensions/message-integrity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAsB,MAAM,aAAa,CAAC;AA4E/D;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,OAAO,EAAE,EACnB,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,GACrC,GAAG,CAAC,MAAM,CAAC,CAwBb"}
@@ -1,88 +0,0 @@
1
- function readToolCallId(part) {
2
- const value = part.toolCallId;
3
- if (typeof value !== 'string' || value.length === 0) {
4
- return null;
5
- }
6
- return value;
7
- }
8
- function collectToolCallIds(message) {
9
- const ids = new Set();
10
- if (!message) {
11
- return ids;
12
- }
13
- const content = message.data.content;
14
- if (!Array.isArray(content)) {
15
- return ids;
16
- }
17
- for (const part of content) {
18
- if (part.type !== 'tool-call' && part.type !== 'tool_call' && part.type !== 'tool_use') {
19
- continue;
20
- }
21
- const toolCallId = readToolCallId(part);
22
- if (!toolCallId) {
23
- continue;
24
- }
25
- ids.add(toolCallId);
26
- }
27
- return ids;
28
- }
29
- function collectToolResultIds(message) {
30
- const content = message.data.content;
31
- if (!Array.isArray(content)) {
32
- return [];
33
- }
34
- const ids = [];
35
- for (const part of content) {
36
- if (part.type !== 'tool-result' && part.type !== 'tool_result') {
37
- continue;
38
- }
39
- const toolCallId = readToolCallId(part);
40
- if (!toolCallId) {
41
- continue;
42
- }
43
- ids.push(toolCallId);
44
- }
45
- return ids;
46
- }
47
- function hasDanglingToolResult(message, previousMessage) {
48
- const toolResultIds = collectToolResultIds(message);
49
- if (toolResultIds.length === 0) {
50
- return false;
51
- }
52
- const previousToolCallIds = collectToolCallIds(previousMessage);
53
- if (previousToolCallIds.size === 0) {
54
- return true;
55
- }
56
- for (const toolResultId of toolResultIds) {
57
- if (!previousToolCallIds.has(toolResultId)) {
58
- return true;
59
- }
60
- }
61
- return false;
62
- }
63
- /**
64
- * Removes messages that would leave invalid tool_result references after trimming.
65
- * Anthropic requires every tool_result block to map to a tool_use/tool-call block
66
- * in the immediately previous assistant message.
67
- */
68
- export function normalizeRemovalTargets(messages, initialRemovedIds) {
69
- const removedIds = new Set(initialRemovedIds);
70
- let changed = true;
71
- while (changed) {
72
- changed = false;
73
- let previousRemainingMessage;
74
- for (const message of messages) {
75
- if (removedIds.has(message.id)) {
76
- continue;
77
- }
78
- if (hasDanglingToolResult(message, previousRemainingMessage)) {
79
- removedIds.add(message.id);
80
- changed = true;
81
- continue;
82
- }
83
- previousRemainingMessage = message;
84
- }
85
- }
86
- return removedIds;
87
- }
88
- //# sourceMappingURL=message-integrity.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"message-integrity.js","sourceRoot":"","sources":["../../src/extensions/message-integrity.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import type { ExtensionApi } from '../types.js';
2
- export interface MessageWindowExtensionConfig {
3
- maxMessages?: number;
4
- }
5
- export declare function registerMessageWindowExtension(api: ExtensionApi, config?: MessageWindowExtensionConfig): void;
6
- export declare function register(api: ExtensionApi, config?: MessageWindowExtensionConfig): void;
7
- //# sourceMappingURL=message-window.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"message-window.d.ts","sourceRoot":"","sources":["../../src/extensions/message-window.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAyB,MAAM,aAAa,CAAC;AAGvE,MAAM,WAAW,4BAA4B;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAmBD,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,YAAY,EACjB,MAAM,CAAC,EAAE,4BAA4B,GACpC,IAAI,CA+CN;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,4BAA4B,GAAG,IAAI,CAEvF"}
@@ -1,60 +0,0 @@
1
- import { normalizeRemovalTargets } from './message-integrity.js';
2
- const DEFAULT_CONFIG = {
3
- maxMessages: 40,
4
- };
5
- function isPinned(message) {
6
- return message.metadata.pinned === true;
7
- }
8
- function resolveMaxMessages(config) {
9
- const value = config?.maxMessages;
10
- if (typeof value !== 'number' || !Number.isFinite(value) || value < 1) {
11
- return DEFAULT_CONFIG.maxMessages;
12
- }
13
- return Math.floor(value);
14
- }
15
- export function registerMessageWindowExtension(api, config) {
16
- const maxMessages = resolveMaxMessages(config);
17
- api.pipeline.register('turn', async (ctx) => {
18
- const messages = ctx.conversationState.nextMessages;
19
- const removedIds = new Set();
20
- if (messages.length > maxMessages) {
21
- const removeCount = messages.length - maxMessages;
22
- let removed = 0;
23
- for (const message of messages) {
24
- if (removed >= removeCount) {
25
- break;
26
- }
27
- if (!message) {
28
- continue;
29
- }
30
- if (isPinned(message)) {
31
- continue;
32
- }
33
- removedIds.add(message.id);
34
- removed += 1;
35
- }
36
- }
37
- const normalizedRemovedIds = normalizeRemovalTargets(messages, removedIds);
38
- if (normalizedRemovedIds.size === 0) {
39
- return ctx.next();
40
- }
41
- const events = [];
42
- for (const message of messages) {
43
- if (!normalizedRemovedIds.has(message.id)) {
44
- continue;
45
- }
46
- events.push({
47
- type: 'remove',
48
- targetId: message.id,
49
- });
50
- }
51
- for (const event of events) {
52
- ctx.emitMessageEvent(event);
53
- }
54
- return ctx.next();
55
- });
56
- }
57
- export function register(api, config) {
58
- registerMessageWindowExtension(api, config);
59
- }
60
- //# sourceMappingURL=message-window.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"message-window.js","sourceRoot":"","sources":["../../src/extensions/message-window.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAMjE,MAAM,cAAc,GAA2C;IAC7D,WAAW,EAAE,EAAE;CAChB,CAAC;AAEF,SAAS,QAAQ,CAAC,OAAgB;IAChC,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC;AAC1C,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAqC;IAC/D,MAAM,KAAK,GAAG,MAAM,EAAE,WAAW,CAAC;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACtE,OAAO,cAAc,CAAC,WAAW,CAAC;IACpC,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,GAAiB,EACjB,MAAqC;IAErC,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE/C,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC1C,MAAM,QAAQ,GAAG,GAAG,CAAC,iBAAiB,CAAC,YAAY,CAAC;QACpD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,IAAI,QAAQ,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;YAClC,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,GAAG,WAAW,CAAC;YAClD,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;oBAC3B,MAAM;gBACR,CAAC;gBACD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,SAAS;gBACX,CAAC;gBACD,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtB,SAAS;gBACX,CAAC;gBACD,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC3B,OAAO,IAAI,CAAC,CAAC;YACf,CAAC;QACH,CAAC;QAED,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC3E,IAAI,oBAAoB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;QAED,MAAM,MAAM,GAAmB,EAAE,CAAC;QAClC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC1C,SAAS;YACX,CAAC;YAED,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,OAAO,CAAC,EAAE;aACrB,CAAC,CAAC;QACL,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAiB,EAAE,MAAqC;IAC/E,8BAA8B,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC"}
@@ -1,9 +0,0 @@
1
- import type { ExtensionApi } from '../types.js';
2
- export interface RequiredToolsGuardConfig {
3
- /** Turn 종료 전 반드시 성공 호출되어야 하는 tool 이름 목록 (최소 1개). */
4
- requiredTools?: string[];
5
- /** 미충족 시 LLM에 주입할 오류 메시지. */
6
- errorMessage?: string;
7
- }
8
- export declare function register(api: ExtensionApi, config?: RequiredToolsGuardConfig): void;
9
- //# sourceMappingURL=required-tools-guard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"required-tools-guard.d.ts","sourceRoot":"","sources":["../../src/extensions/required-tools-guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,wBAAwB;IACvC,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,6BAA6B;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA+BD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAwDnF"}
@@ -1,74 +0,0 @@
1
- function createUserMessage(text) {
2
- return {
3
- id: `rtg-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,
4
- data: { role: 'user', content: text },
5
- metadata: {},
6
- createdAt: new Date(),
7
- source: { type: 'extension', extensionName: 'required-tools-guard' },
8
- };
9
- }
10
- function normalizeConfig(raw) {
11
- const config = {};
12
- if (Array.isArray(raw?.requiredTools)) {
13
- const requiredTools = raw.requiredTools.filter((entry) => typeof entry === 'string' && entry.trim().length > 0);
14
- if (requiredTools.length > 0) {
15
- config.requiredTools = requiredTools;
16
- }
17
- }
18
- if (typeof raw?.errorMessage === 'string') {
19
- config.errorMessage = raw.errorMessage;
20
- }
21
- return config;
22
- }
23
- export function register(api, config) {
24
- const rawConfig = normalizeConfig(config);
25
- const requiredTools = Array.isArray(rawConfig.requiredTools) ? rawConfig.requiredTools : [];
26
- const errorMessage = typeof rawConfig.errorMessage === 'string' && rawConfig.errorMessage.trim().length > 0
27
- ? rawConfig.errorMessage
28
- : `다음 도구 중 하나를 반드시 호출하세요: ${requiredTools.join(', ')}`;
29
- if (requiredTools.length === 0)
30
- return;
31
- // turnId별 성공한 tool 호출 추적
32
- const calledToolsPerTurn = new Map();
33
- api.pipeline.register('turn', async (ctx) => {
34
- // turn 경계에서 누적 상태를 강제 리셋한다.
35
- calledToolsPerTurn.clear();
36
- calledToolsPerTurn.set(ctx.turnId, new Set());
37
- try {
38
- return await ctx.next();
39
- }
40
- finally {
41
- calledToolsPerTurn.delete(ctx.turnId);
42
- calledToolsPerTurn.clear();
43
- }
44
- });
45
- api.pipeline.register('toolCall', async (ctx) => {
46
- const result = await ctx.next();
47
- if (result.status === 'ok') {
48
- if (!calledToolsPerTurn.has(ctx.turnId)) {
49
- calledToolsPerTurn.set(ctx.turnId, new Set());
50
- }
51
- calledToolsPerTurn.get(ctx.turnId)?.add(ctx.toolName);
52
- }
53
- return result;
54
- });
55
- api.pipeline.register('step', async (ctx) => {
56
- const result = await ctx.next();
57
- if (result.shouldContinue)
58
- return result;
59
- // 현재 step의 결과도 반영
60
- const calledTools = calledToolsPerTurn.get(ctx.turnId) ?? new Set();
61
- for (const tr of result.toolResults) {
62
- if (tr.status === 'ok')
63
- calledTools.add(tr.toolName);
64
- }
65
- const satisfied = requiredTools.some((t) => calledTools.has(t));
66
- if (satisfied) {
67
- calledToolsPerTurn.delete(ctx.turnId);
68
- return result;
69
- }
70
- ctx.emitMessageEvent({ type: 'append', message: createUserMessage(errorMessage) });
71
- return { ...result, shouldContinue: true };
72
- });
73
- }
74
- //# sourceMappingURL=required-tools-guard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"required-tools-guard.js","sourceRoot":"","sources":["../../src/extensions/required-tools-guard.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import type { ExtensionApi } from '../types.js';
2
- export interface ToolSearchExtensionConfig {
3
- toolName?: string;
4
- maxResults?: number;
5
- minQueryLength?: number;
6
- persistSelection?: boolean;
7
- }
8
- export declare function registerToolSearchExtension(api: ExtensionApi, config?: ToolSearchExtensionConfig): void;
9
- export declare function register(api: ExtensionApi, config?: ToolSearchExtensionConfig): void;
10
- //# sourceMappingURL=tool-search.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-search.d.ts","sourceRoot":"","sources":["../../src/extensions/tool-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAOb,MAAM,aAAa,CAAC;AAOrB,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AA8ND,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,YAAY,EACjB,MAAM,CAAC,EAAE,yBAAyB,GACjC,IAAI,CAqCN;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAEpF"}
@@ -1,198 +0,0 @@
1
- import { isJsonObject, optionalNumber, requireString, } from '../utils.js';
2
- const DEFAULT_CONFIG = {
3
- toolName: 'tool-search__search',
4
- maxResults: 10,
5
- minQueryLength: 1,
6
- persistSelection: true,
7
- };
8
- function readStringArray(value) {
9
- if (!Array.isArray(value)) {
10
- return [];
11
- }
12
- const output = [];
13
- for (const item of value) {
14
- if (typeof item === 'string') {
15
- output.push(item);
16
- }
17
- }
18
- return output;
19
- }
20
- function readSnapshot(value) {
21
- if (!Array.isArray(value)) {
22
- return [];
23
- }
24
- const snapshot = [];
25
- for (const item of value) {
26
- if (!isJsonObject(item)) {
27
- continue;
28
- }
29
- const name = item.name;
30
- const description = item.description;
31
- if (typeof name !== 'string') {
32
- continue;
33
- }
34
- if (description !== undefined && typeof description !== 'string') {
35
- continue;
36
- }
37
- snapshot.push({ name, description });
38
- }
39
- return snapshot;
40
- }
41
- function readState(raw) {
42
- if (!isJsonObject(raw)) {
43
- return {
44
- selectedTools: [],
45
- catalogSnapshot: [],
46
- };
47
- }
48
- const selectedTools = readStringArray(raw.selectedTools);
49
- const catalogSnapshot = readSnapshot(raw.catalogSnapshot);
50
- const lastQuery = typeof raw.lastQuery === 'string' ? raw.lastQuery : undefined;
51
- return {
52
- selectedTools,
53
- catalogSnapshot,
54
- lastQuery,
55
- };
56
- }
57
- function writeState(state) {
58
- const serializedSnapshot = [];
59
- for (const item of state.catalogSnapshot) {
60
- const row = { name: item.name };
61
- if (item.description) {
62
- row.description = item.description;
63
- }
64
- serializedSnapshot.push(row);
65
- }
66
- const output = {
67
- selectedTools: state.selectedTools,
68
- catalogSnapshot: serializedSnapshot,
69
- };
70
- if (state.lastQuery) {
71
- output.lastQuery = state.lastQuery;
72
- }
73
- return output;
74
- }
75
- function normalizeQuery(query) {
76
- return query.trim().toLowerCase();
77
- }
78
- function searchSnapshot(snapshot, query, limit) {
79
- if (query.length === 0) {
80
- return [];
81
- }
82
- const matched = [];
83
- for (const item of snapshot) {
84
- const nameMatch = item.name.toLowerCase().includes(query);
85
- const descriptionMatch = item.description
86
- ? item.description.toLowerCase().includes(query)
87
- : false;
88
- if (!nameMatch && !descriptionMatch) {
89
- continue;
90
- }
91
- matched.push(item);
92
- if (matched.length >= limit) {
93
- break;
94
- }
95
- }
96
- return matched;
97
- }
98
- function toJsonResults(items) {
99
- return items.map((item) => {
100
- const output = {
101
- name: item.name,
102
- };
103
- if (item.description) {
104
- output.description = item.description;
105
- }
106
- return output;
107
- });
108
- }
109
- function createSearchHandler(api, config) {
110
- return async (_ctx, input) => {
111
- const query = requireString(input, 'query');
112
- const normalizedQuery = normalizeQuery(query);
113
- if (normalizedQuery.length < config.minQueryLength) {
114
- return {
115
- query,
116
- results: [],
117
- selectedTools: [],
118
- };
119
- }
120
- const requestedLimit = optionalNumber(input, 'limit', config.maxResults) ?? config.maxResults;
121
- const safeLimit = Math.max(1, Math.min(config.maxResults, Math.floor(requestedLimit)));
122
- const currentState = readState(await api.state.get());
123
- const results = searchSnapshot(currentState.catalogSnapshot, normalizedQuery, safeLimit);
124
- const selectedTools = results.map((item) => item.name);
125
- if (config.persistSelection) {
126
- const nextState = {
127
- selectedTools,
128
- catalogSnapshot: currentState.catalogSnapshot,
129
- lastQuery: query,
130
- };
131
- await api.state.set(writeState(nextState));
132
- }
133
- return {
134
- query,
135
- results: toJsonResults(results),
136
- selectedTools,
137
- };
138
- };
139
- }
140
- function snapshotCatalog(catalog) {
141
- return catalog.map((item) => ({
142
- name: item.name,
143
- description: item.description,
144
- }));
145
- }
146
- function filterCatalog(ctx, selectedTools, searchToolName) {
147
- if (selectedTools.length === 0) {
148
- return;
149
- }
150
- const allow = new Set();
151
- for (const toolName of selectedTools) {
152
- allow.add(toolName);
153
- }
154
- allow.add(searchToolName);
155
- ctx.toolCatalog = ctx.toolCatalog.filter((item) => allow.has(item.name));
156
- }
157
- function mergeConfig(config) {
158
- return {
159
- toolName: config?.toolName ?? DEFAULT_CONFIG.toolName,
160
- maxResults: config?.maxResults ?? DEFAULT_CONFIG.maxResults,
161
- minQueryLength: config?.minQueryLength ?? DEFAULT_CONFIG.minQueryLength,
162
- persistSelection: config?.persistSelection ?? DEFAULT_CONFIG.persistSelection,
163
- };
164
- }
165
- export function registerToolSearchExtension(api, config) {
166
- const settings = mergeConfig(config);
167
- api.tools.register({
168
- name: settings.toolName,
169
- description: 'Search available tools and store next-step catalog selection',
170
- parameters: {
171
- type: 'object',
172
- properties: {
173
- query: { type: 'string' },
174
- limit: { type: 'number' },
175
- },
176
- required: ['query'],
177
- },
178
- source: {
179
- type: 'extension',
180
- name: 'tool-search',
181
- },
182
- }, createSearchHandler(api, settings));
183
- api.pipeline.register('step', async (ctx) => {
184
- const previousState = readState(await api.state.get());
185
- filterCatalog(ctx, previousState.selectedTools, settings.toolName);
186
- const nextState = {
187
- selectedTools: previousState.selectedTools,
188
- lastQuery: previousState.lastQuery,
189
- catalogSnapshot: snapshotCatalog(ctx.toolCatalog),
190
- };
191
- await api.state.set(writeState(nextState));
192
- return ctx.next();
193
- });
194
- }
195
- export function register(api, config) {
196
- registerToolSearchExtension(api, config);
197
- }
198
- //# sourceMappingURL=tool-search.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-search.js","sourceRoot":"","sources":["../../src/extensions/tool-search.ts"],"names":[],"mappings":"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"}