common-qa-mcp 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 (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +96 -0
  3. package/dist/adapters/factory.d.ts +15 -0
  4. package/dist/adapters/factory.d.ts.map +1 -0
  5. package/dist/adapters/factory.js +18 -0
  6. package/dist/adapters/factory.js.map +1 -0
  7. package/dist/adapters/remoteMcp/adapter.d.ts +92 -0
  8. package/dist/adapters/remoteMcp/adapter.d.ts.map +1 -0
  9. package/dist/adapters/remoteMcp/adapter.js +219 -0
  10. package/dist/adapters/remoteMcp/adapter.js.map +1 -0
  11. package/dist/adapters/types.d.ts +77 -0
  12. package/dist/adapters/types.d.ts.map +1 -0
  13. package/dist/adapters/types.js +2 -0
  14. package/dist/adapters/types.js.map +1 -0
  15. package/dist/adapters/walnut/actionTypes.d.ts +16 -0
  16. package/dist/adapters/walnut/actionTypes.d.ts.map +1 -0
  17. package/dist/adapters/walnut/actionTypes.js +141 -0
  18. package/dist/adapters/walnut/actionTypes.js.map +1 -0
  19. package/dist/adapters/walnut/mapper.d.ts +34 -0
  20. package/dist/adapters/walnut/mapper.d.ts.map +1 -0
  21. package/dist/adapters/walnut/mapper.js +228 -0
  22. package/dist/adapters/walnut/mapper.js.map +1 -0
  23. package/dist/cli.d.ts +3 -0
  24. package/dist/cli.d.ts.map +1 -0
  25. package/dist/cli.js +36 -0
  26. package/dist/cli.js.map +1 -0
  27. package/dist/config.d.ts +81 -0
  28. package/dist/config.d.ts.map +1 -0
  29. package/dist/config.js +211 -0
  30. package/dist/config.js.map +1 -0
  31. package/dist/connection.d.ts +101 -0
  32. package/dist/connection.d.ts.map +1 -0
  33. package/dist/connection.js +190 -0
  34. package/dist/connection.js.map +1 -0
  35. package/dist/domain/types.d.ts +279 -0
  36. package/dist/domain/types.d.ts.map +1 -0
  37. package/dist/domain/types.js +2 -0
  38. package/dist/domain/types.js.map +1 -0
  39. package/dist/domain/validate.d.ts +3 -0
  40. package/dist/domain/validate.d.ts.map +1 -0
  41. package/dist/domain/validate.js +29 -0
  42. package/dist/domain/validate.js.map +1 -0
  43. package/dist/drafts/store.d.ts +62 -0
  44. package/dist/drafts/store.d.ts.map +1 -0
  45. package/dist/drafts/store.js +119 -0
  46. package/dist/drafts/store.js.map +1 -0
  47. package/dist/httpMain.d.ts +3 -0
  48. package/dist/httpMain.d.ts.map +1 -0
  49. package/dist/httpMain.js +22 -0
  50. package/dist/httpMain.js.map +1 -0
  51. package/dist/index.d.ts +3 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +46 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/initAgents.d.ts +2 -0
  56. package/dist/initAgents.d.ts.map +1 -0
  57. package/dist/initAgents.js +178 -0
  58. package/dist/initAgents.js.map +1 -0
  59. package/dist/log.d.ts +14 -0
  60. package/dist/log.d.ts.map +1 -0
  61. package/dist/log.js +14 -0
  62. package/dist/log.js.map +1 -0
  63. package/dist/mcpResult.d.ts +20 -0
  64. package/dist/mcpResult.d.ts.map +1 -0
  65. package/dist/mcpResult.js +8 -0
  66. package/dist/mcpResult.js.map +1 -0
  67. package/dist/mount.d.ts +12 -0
  68. package/dist/mount.d.ts.map +1 -0
  69. package/dist/mount.js +126 -0
  70. package/dist/mount.js.map +1 -0
  71. package/dist/projectStore.d.ts +5 -0
  72. package/dist/projectStore.d.ts.map +1 -0
  73. package/dist/projectStore.js +60 -0
  74. package/dist/projectStore.js.map +1 -0
  75. package/dist/requestConnection.d.ts +20 -0
  76. package/dist/requestConnection.d.ts.map +1 -0
  77. package/dist/requestConnection.js +44 -0
  78. package/dist/requestConnection.js.map +1 -0
  79. package/dist/serve.d.ts +10 -0
  80. package/dist/serve.d.ts.map +1 -0
  81. package/dist/serve.js +37 -0
  82. package/dist/serve.js.map +1 -0
  83. package/dist/server.d.ts +29 -0
  84. package/dist/server.d.ts.map +1 -0
  85. package/dist/server.js +76 -0
  86. package/dist/server.js.map +1 -0
  87. package/dist/tools/connection.tools.d.ts +16 -0
  88. package/dist/tools/connection.tools.d.ts.map +1 -0
  89. package/dist/tools/connection.tools.js +106 -0
  90. package/dist/tools/connection.tools.js.map +1 -0
  91. package/dist/tools/discovery.tools.d.ts +16 -0
  92. package/dist/tools/discovery.tools.d.ts.map +1 -0
  93. package/dist/tools/discovery.tools.js +369 -0
  94. package/dist/tools/discovery.tools.js.map +1 -0
  95. package/dist/tools/markdown.d.ts +13 -0
  96. package/dist/tools/markdown.d.ts.map +1 -0
  97. package/dist/tools/markdown.js +65 -0
  98. package/dist/tools/markdown.js.map +1 -0
  99. package/dist/tools/recording.tools.d.ts +16 -0
  100. package/dist/tools/recording.tools.d.ts.map +1 -0
  101. package/dist/tools/recording.tools.js +378 -0
  102. package/dist/tools/recording.tools.js.map +1 -0
  103. package/dist/tools/run.tools.d.ts +13 -0
  104. package/dist/tools/run.tools.d.ts.map +1 -0
  105. package/dist/tools/run.tools.js +230 -0
  106. package/dist/tools/run.tools.js.map +1 -0
  107. package/dist/tools/schemas.d.ts +560 -0
  108. package/dist/tools/schemas.d.ts.map +1 -0
  109. package/dist/tools/schemas.js +112 -0
  110. package/dist/tools/schemas.js.map +1 -0
  111. package/dist/tools/testcase.tools.d.ts +50 -0
  112. package/dist/tools/testcase.tools.d.ts.map +1 -0
  113. package/dist/tools/testcase.tools.js +384 -0
  114. package/dist/tools/testcase.tools.js.map +1 -0
  115. package/dist/vendor/actionSignatures.d.ts +117 -0
  116. package/dist/vendor/actionSignatures.d.ts.map +1 -0
  117. package/dist/vendor/actionSignatures.js +420 -0
  118. package/dist/vendor/actionSignatures.js.map +1 -0
  119. package/dist/vendor/logger.d.ts +38 -0
  120. package/dist/vendor/logger.d.ts.map +1 -0
  121. package/dist/vendor/logger.js +174 -0
  122. package/dist/vendor/logger.js.map +1 -0
  123. package/package.json +57 -0
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Unified action-signature registry (WEB) — shadow registry.
3
+ *
4
+ * ONE declaration per action = the single source of truth for its step-description shape
5
+ * and what it requires (object binding, parameters). Today these facts are re-declared
6
+ * independently across ~5 consumers (action def, LLM schema, bake, parameterizer, execute
7
+ * validation) and drift out of sync — the root cause of the verify_value / store /
8
+ * verify-description bugs. Later phases make each consumer DERIVE from this registry.
9
+ *
10
+ * The registry declares the FULL web action catalog — every catalogued web action_type: the
11
+ * playwright action handlers PLUS the three step-handler web actions (store_run_variable,
12
+ * store_global_variable, switch_window, declared at the bottom, shadow-only). Two
13
+ * web-registered action_types are intentionally EXCLUDED: `tap` (a mobile/touch action kept
14
+ * out of the web catalog) and `verify_element_state` (a backward-compatible ALIAS of
15
+ * `verify_element_visible` — same handler + template; declaring both would be a pure
16
+ * duplicate, so only verify_element_visible is here). Both stay registered/executable elsewhere. The registry stays
17
+ * SHADOW-ONLY at runtime: deriveWebStepSemantics only DERIVES its description from this
18
+ * registry for the verify family (the sole reader, stepSemantics.ts). Every other entry is
19
+ * proven faithful to the live bake by the golden-oracle test (actionSignatures.test.ts) for
20
+ * the actions the recorder emits, and structurally validated for execution-only actions the
21
+ * recorder never produces (snapshot, tracing, dialogs, …).
22
+ *
23
+ * Leaf module by design (no generateTestSteps import chain, and no stepSemantics import —
24
+ * stepSemantics imports THIS file, so importing back would be circular), so tests can import
25
+ * the REAL code — the same reason journalPlacement.ts / androidJournalFirst.ts are separate.
26
+ *
27
+ * Design: docs/superpowers/specs/2026-07-19-unified-action-signature-registry-design.md
28
+ */
29
+ export interface ActionParam {
30
+ /** Test-data column minted for this action's value (e.g. 'expected_value'). When
31
+ * `derivedFromObject` is set this is the FALLBACK name used when the element has no
32
+ * usable label. */
33
+ name: string;
34
+ /** Which template slot the value fills: a content value, or an element state. */
35
+ slot: 'value' | 'state';
36
+ /** When true, the param NAME is derived from the captured element label at bake time
37
+ * (snake_case), falling back to `name`. Models type/select, whose param is named after
38
+ * the field — e.g. "Email Field" → `Enter ${email_field} in Email Field`. The template
39
+ * carries this param as its fallback `${name}` token (e.g. `${value}`); fillDescription
40
+ * rewrites that token to the object-derived name when an element is present. */
41
+ derivedFromObject?: boolean;
42
+ /** The VALUE KIND replay can actually use. Declared only where the WRONG kind misexecutes
43
+ * SILENTLY: every `number` param is read with a digit regex at replay and falls back to a
44
+ * default when it doesn't match (resize → 1280x720, wait_timeout → 1000ms, tabs → last tab,
45
+ * mouse_* → 0,0), so a non-numeric literal runs a DIFFERENT action instead of failing.
46
+ * Undeclared = free text, nothing to check. Surfaced to the step editor via the authoring
47
+ * contract (actionSyncService.authoringContract). */
48
+ valueType?: 'number';
49
+ /** Declared for completeness, but the author does NOT have to supply it — it is absent from
50
+ * the catalog template and only applies to some operators (verify_compare's `tolerance` is
51
+ * read for `close_to` only). Kept out of the authoring contract's required list. */
52
+ optional?: true;
53
+ }
54
+ export interface ActionSignature {
55
+ /** Matches action_type, e.g. 'verify_value'. */
56
+ actionType: string;
57
+ /**
58
+ * The exact step-description shape. `<element>` is the ONLY angle-bracket token — a human
59
+ * ELEMENT placeholder (present iff `requires.object`): the Manual Steps editor shows it raw
60
+ * (not a purple parameter), while recording fills it with the captured element name. Values
61
+ * are always `${...}` PARAM tokens — never angle-bracketed. Substitution at bake time:
62
+ * `<element>` → the captured element label.
63
+ * `${inputValue}` → the captured literal value (verify text/value only).
64
+ * `${<name>}` of a `derivedFromObject` param → rewritten to the object-derived name
65
+ * (e.g. `${value}` → `${email_field}`) when an element is present.
66
+ * Every other `${...}` is a fixed PARAM token that survives verbatim (`${expected_state}`,
67
+ * `${file_path}`, `${key_name}`, `${target}`, `${url}`, …) — declared in `requires.params`.
68
+ *
69
+ * Templates model the PRIMARY (object/value-present) form only; the degenerate no-object
70
+ * / no-value cases stay hand-coded in deriveWebStepSemantics.
71
+ */
72
+ descriptionTemplate: string;
73
+ requires: {
74
+ /** Needs an element/selector binding — rejected at record time if missing. Mirrors the
75
+ * action handler's `needsLocator` for interaction actions; a few verify actions carry a
76
+ * recorded object even though their replay handler resolves it without a pinned locator. */
77
+ object: boolean;
78
+ params?: ActionParam[];
79
+ };
80
+ }
81
+ /**
82
+ * Fill a signature's template with a captured element name + value. `<element>` is replaced
83
+ * with the captured label (the raw `<element>` only shows in the Manual Steps editor before an
84
+ * element is linked); `${inputValue}` with the captured literal; and a `derivedFromObject`
85
+ * param's fallback token (`${value}` / `${option}`) is rewritten to the object-derived name
86
+ * (`${email_field}`). All other `${param}` tokens survive verbatim.
87
+ */
88
+ export declare function fillDescription(sig: ActionSignature, slots: {
89
+ objectName?: string;
90
+ inputValue?: string;
91
+ }): string;
92
+ /**
93
+ * Render a signature for the ACTION CATALOG / Manual Steps editor surface (a different surface
94
+ * from the recording bake). The editor understands `${param}` tokens (extracted, colored, and
95
+ * auto-created as test data) and shows `<element>` as the raw placeholder the user links an
96
+ * object to — but it does NOT understand the recording-only fill slot `${inputValue}`. So this
97
+ * converts `${inputValue}` to its declared `${param}` form, LEAVING `<element>` and every other
98
+ * `${token}` (incl. a derivedFromObject param's fallback `${value}`/`${option}`) as-is.
99
+ *
100
+ * type 'Enter ${value} in <element>' → unchanged
101
+ * select_option 'Select ${option} from <element>' → unchanged
102
+ * verify_text 'Verify <element> contains "${inputValue}"' → 'Verify <element> contains ${expected_text}'
103
+ * click 'Click <element>' → unchanged
104
+ *
105
+ * The quotes a bake template wraps its value in ("${inputValue}") are dropped here: they belong
106
+ * to the recorded literal, whereas a bare ${param} is what the editor extracts as test data.
107
+ */
108
+ export declare function catalogDescription(sig: ActionSignature): string;
109
+ /**
110
+ * WEB recorded-action signatures — the full web action catalog.
111
+ *
112
+ * Grouped to mirror actions/index.ts. Actions the recorder emits carry the SAME description
113
+ * the live bake produces (golden-oracle enforced); execution-only actions (which the recorder
114
+ * never records as a step) carry a designed template validated only structurally.
115
+ */
116
+ export declare const WEB_ACTION_SIGNATURES: Record<string, ActionSignature>;
117
+ //# sourceMappingURL=actionSignatures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actionSignatures.d.ts","sourceRoot":"","sources":["../../src/vendor/actionSignatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,MAAM,WAAW,WAAW;IAC1B;;wBAEoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB;;;;qFAIiF;IACjF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;0DAKsD;IACtD,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB;;yFAEqF;IACrF,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB;AAOD,MAAM,WAAW,eAAe;IAC9B,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;;;;;OAcG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE;QACR;;qGAE6F;QAC7F,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;KACxB,CAAC;CACH;AAWD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAClD,MAAM,CAYR;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAY/D;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CA+UjE,CAAC"}
@@ -0,0 +1,420 @@
1
+ /**
2
+ * Unified action-signature registry (WEB) — shadow registry.
3
+ *
4
+ * ONE declaration per action = the single source of truth for its step-description shape
5
+ * and what it requires (object binding, parameters). Today these facts are re-declared
6
+ * independently across ~5 consumers (action def, LLM schema, bake, parameterizer, execute
7
+ * validation) and drift out of sync — the root cause of the verify_value / store /
8
+ * verify-description bugs. Later phases make each consumer DERIVE from this registry.
9
+ *
10
+ * The registry declares the FULL web action catalog — every catalogued web action_type: the
11
+ * playwright action handlers PLUS the three step-handler web actions (store_run_variable,
12
+ * store_global_variable, switch_window, declared at the bottom, shadow-only). Two
13
+ * web-registered action_types are intentionally EXCLUDED: `tap` (a mobile/touch action kept
14
+ * out of the web catalog) and `verify_element_state` (a backward-compatible ALIAS of
15
+ * `verify_element_visible` — same handler + template; declaring both would be a pure
16
+ * duplicate, so only verify_element_visible is here). Both stay registered/executable elsewhere. The registry stays
17
+ * SHADOW-ONLY at runtime: deriveWebStepSemantics only DERIVES its description from this
18
+ * registry for the verify family (the sole reader, stepSemantics.ts). Every other entry is
19
+ * proven faithful to the live bake by the golden-oracle test (actionSignatures.test.ts) for
20
+ * the actions the recorder emits, and structurally validated for execution-only actions the
21
+ * recorder never produces (snapshot, tracing, dialogs, …).
22
+ *
23
+ * Leaf module by design (no generateTestSteps import chain, and no stepSemantics import —
24
+ * stepSemantics imports THIS file, so importing back would be circular), so tests can import
25
+ * the REAL code — the same reason journalPlacement.ts / androidJournalFirst.ts are separate.
26
+ *
27
+ * Design: docs/superpowers/specs/2026-07-19-unified-action-signature-registry-design.md
28
+ */
29
+ /** snake_case a captured element label into a parameter name — e.g. "Email Field" →
30
+ * "email_field". MIRROR of stepSemantics.paramNameFromObject; kept LOCAL because
31
+ * stepSemantics.ts imports THIS module (importing back would be circular). The golden-oracle
32
+ * test compares fillDescription against the live bake, so any drift between the two copies
33
+ * fails the test. */
34
+ function deriveParamName(objectName) {
35
+ return objectName ? objectName.toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/^_|_$/g, '') : '';
36
+ }
37
+ /**
38
+ * Fill a signature's template with a captured element name + value. `<element>` is replaced
39
+ * with the captured label (the raw `<element>` only shows in the Manual Steps editor before an
40
+ * element is linked); `${inputValue}` with the captured literal; and a `derivedFromObject`
41
+ * param's fallback token (`${value}` / `${option}`) is rewritten to the object-derived name
42
+ * (`${email_field}`). All other `${param}` tokens survive verbatim.
43
+ */
44
+ export function fillDescription(sig, slots) {
45
+ let out = sig.descriptionTemplate
46
+ .replace(/<element>/g, slots.objectName ?? '')
47
+ .replace(/\$\{inputValue\}/g, slots.inputValue ?? '');
48
+ const derivedParam = sig.requires.params?.find(p => p.derivedFromObject);
49
+ if (derivedParam) {
50
+ const derived = deriveParamName(slots.objectName) || derivedParam.name;
51
+ // Rewrite the fallback token (${value}) to the object-derived name (${email_field}).
52
+ // split/join avoids escaping the ${…} for a RegExp.
53
+ out = out.split('${' + derivedParam.name + '}').join('${' + derived + '}');
54
+ }
55
+ return out;
56
+ }
57
+ /**
58
+ * Render a signature for the ACTION CATALOG / Manual Steps editor surface (a different surface
59
+ * from the recording bake). The editor understands `${param}` tokens (extracted, colored, and
60
+ * auto-created as test data) and shows `<element>` as the raw placeholder the user links an
61
+ * object to — but it does NOT understand the recording-only fill slot `${inputValue}`. So this
62
+ * converts `${inputValue}` to its declared `${param}` form, LEAVING `<element>` and every other
63
+ * `${token}` (incl. a derivedFromObject param's fallback `${value}`/`${option}`) as-is.
64
+ *
65
+ * type 'Enter ${value} in <element>' → unchanged
66
+ * select_option 'Select ${option} from <element>' → unchanged
67
+ * verify_text 'Verify <element> contains "${inputValue}"' → 'Verify <element> contains ${expected_text}'
68
+ * click 'Click <element>' → unchanged
69
+ *
70
+ * The quotes a bake template wraps its value in ("${inputValue}") are dropped here: they belong
71
+ * to the recorded literal, whereas a bare ${param} is what the editor extracts as test data.
72
+ */
73
+ export function catalogDescription(sig) {
74
+ let out = sig.descriptionTemplate;
75
+ // ${inputValue} → the declared value param the captured literal maps to (e.g. expected_text),
76
+ // so the manual template shows an editable ${param} instead of the internal fill slot.
77
+ if (out.includes('${inputValue}')) {
78
+ const valueParam = sig.requires.params?.find(p => p.slot === 'value' && !p.derivedFromObject);
79
+ const token = valueParam ? '${' + valueParam.name + '}' : '';
80
+ // Strip the bake's surrounding quotes first, so the catalog reads `contains ${expected_text}`
81
+ // rather than `contains "${expected_text}"`.
82
+ out = out.split('"${inputValue}"').join(token).replace(/\$\{inputValue\}/g, token);
83
+ }
84
+ return out;
85
+ }
86
+ /**
87
+ * WEB recorded-action signatures — the full web action catalog.
88
+ *
89
+ * Grouped to mirror actions/index.ts. Actions the recorder emits carry the SAME description
90
+ * the live bake produces (golden-oracle enforced); execution-only actions (which the recorder
91
+ * never records as a step) carry a designed template validated only structurally.
92
+ */
93
+ export const WEB_ACTION_SIGNATURES = {
94
+ // ── Element interaction ────────────────────────────────────────────────────────────────
95
+ click: {
96
+ actionType: 'click',
97
+ descriptionTemplate: 'Click on <element>',
98
+ requires: { object: true },
99
+ },
100
+ type: {
101
+ actionType: 'type',
102
+ descriptionTemplate: 'Enter ${value} in <element>',
103
+ requires: { object: true, params: [{ name: 'value', slot: 'value', derivedFromObject: true }] },
104
+ },
105
+ fill_form: {
106
+ actionType: 'fill_form',
107
+ descriptionTemplate: 'Enter ${value} in <element>',
108
+ requires: { object: true, params: [{ name: 'value', slot: 'value', derivedFromObject: true }] },
109
+ },
110
+ select_option: {
111
+ actionType: 'select_option',
112
+ descriptionTemplate: 'Select ${option} from <element>',
113
+ requires: { object: true, params: [{ name: 'option', slot: 'value', derivedFromObject: true }] },
114
+ },
115
+ hover: {
116
+ actionType: 'hover',
117
+ descriptionTemplate: 'Hover over <element>',
118
+ requires: { object: true },
119
+ },
120
+ drag: {
121
+ actionType: 'drag',
122
+ descriptionTemplate: 'Drag <element> to ${target}',
123
+ requires: { object: true, params: [{ name: 'target', slot: 'value' }] },
124
+ },
125
+ file_upload: {
126
+ actionType: 'file_upload',
127
+ descriptionTemplate: 'Upload ${file_path} to <element>',
128
+ requires: { object: true, params: [{ name: 'file_path', slot: 'value' }] },
129
+ },
130
+ press_key: {
131
+ actionType: 'press_key',
132
+ descriptionTemplate: 'Press ${key_name}',
133
+ requires: { object: false, params: [{ name: 'key_name', slot: 'value' }] },
134
+ },
135
+ dblclick: {
136
+ actionType: 'dblclick',
137
+ descriptionTemplate: 'Double-click on <element>',
138
+ requires: { object: true },
139
+ },
140
+ focus: {
141
+ actionType: 'focus',
142
+ descriptionTemplate: 'Focus on <element>',
143
+ requires: { object: true },
144
+ },
145
+ blur: {
146
+ actionType: 'blur',
147
+ descriptionTemplate: 'Blur <element>',
148
+ requires: { object: true },
149
+ },
150
+ clear: {
151
+ actionType: 'clear',
152
+ descriptionTemplate: 'Clear <element>',
153
+ requires: { object: true },
154
+ },
155
+ // NOTE: `tap` is intentionally NOT declared here — it is a mobile/touch action kept OUT of
156
+ // the web catalog (2026-07-18 fix), so it has no web catalog row to template.
157
+ // ── Mouse (coordinate-based) ───────────────────────────────────────────────────────────
158
+ mouse_click_xy: {
159
+ actionType: 'mouse_click_xy',
160
+ descriptionTemplate: 'Click at (${x}, ${y})',
161
+ requires: { object: false, params: [{ name: 'x', slot: 'value', valueType: 'number' }, { name: 'y', slot: 'value', valueType: 'number' }] },
162
+ },
163
+ mouse_move_xy: {
164
+ actionType: 'mouse_move_xy',
165
+ descriptionTemplate: 'Move mouse to (${x}, ${y})',
166
+ requires: { object: false, params: [{ name: 'x', slot: 'value', valueType: 'number' }, { name: 'y', slot: 'value', valueType: 'number' }] },
167
+ },
168
+ mouse_drag_xy: {
169
+ actionType: 'mouse_drag_xy',
170
+ descriptionTemplate: 'Drag from (${from_x}, ${from_y}) to (${to_x}, ${to_y})',
171
+ requires: {
172
+ object: false,
173
+ params: [
174
+ { name: 'from_x', slot: 'value', valueType: 'number' }, { name: 'from_y', slot: 'value', valueType: 'number' },
175
+ { name: 'to_x', slot: 'value', valueType: 'number' }, { name: 'to_y', slot: 'value', valueType: 'number' },
176
+ ],
177
+ },
178
+ },
179
+ // ── Navigation & lifecycle ─────────────────────────────────────────────────────────────
180
+ navigate: {
181
+ actionType: 'navigate',
182
+ descriptionTemplate: 'Navigate to ${url}',
183
+ requires: { object: false, params: [{ name: 'url', slot: 'value' }] },
184
+ },
185
+ navigate_back: {
186
+ actionType: 'navigate_back',
187
+ // "back" stays adjacent to "Navigate" so the description-inference URL-nav guard
188
+ // (dispatcher.ts) still excludes it; must match deriveWebStepSemantics's bake exactly.
189
+ descriptionTemplate: 'Navigate back in browser',
190
+ requires: { object: false },
191
+ },
192
+ reload: {
193
+ actionType: 'reload',
194
+ descriptionTemplate: 'Reload Browser Page',
195
+ requires: { object: false },
196
+ },
197
+ go_forward: {
198
+ actionType: 'go_forward',
199
+ descriptionTemplate: 'Navigate forward in Browser',
200
+ requires: { object: false },
201
+ },
202
+ close: {
203
+ actionType: 'close',
204
+ descriptionTemplate: 'Closes current active tab',
205
+ requires: { object: false },
206
+ },
207
+ tabs: {
208
+ actionType: 'tabs',
209
+ descriptionTemplate: 'Switch to tab ${tab_index}',
210
+ requires: { object: false, params: [{ name: 'tab_index', slot: 'value', valueType: 'number' }] },
211
+ },
212
+ open_tab: {
213
+ actionType: 'open_tab',
214
+ descriptionTemplate: 'Open new tab',
215
+ requires: { object: false },
216
+ },
217
+ close_tab: {
218
+ actionType: 'close_tab',
219
+ descriptionTemplate: 'Close tab ${tab_index}',
220
+ requires: { object: false, params: [{ name: 'tab_index', slot: 'value', valueType: 'number' }] },
221
+ },
222
+ // ── Verification ───────────────────────────────────────────────────────────────────────
223
+ // The verify family is the ONLY group deriveWebStepSemantics derives from this registry.
224
+ // verify_element_visible is the catalog/legacy action_type AND the canonical `verify_element_state`
225
+ // alias both route to the same replay handler with this exact shape. Declared ONCE (under the
226
+ // catalog action_type verify_element_visible) — no separate `verify_element_state` entry, which
227
+ // would be a pure duplicate. The alias action_type stays registered/executable in the registry.
228
+ verify_element_visible: {
229
+ actionType: 'verify_element_visible',
230
+ descriptionTemplate: 'Verify <element> is ${expected_state}',
231
+ requires: { object: true, params: [{ name: 'expected_state', slot: 'state' }] },
232
+ },
233
+ // The quotes around ${inputValue} are LOAD-BEARING for the recording bake — the saved step
234
+ // reads `Verify Email Field contains "vijay@x.com"`. catalogDescription() drops them so the
235
+ // manual-step template stays the approved `Verify <element> contains ${expected_text}`.
236
+ verify_text_visible: {
237
+ actionType: 'verify_text_visible',
238
+ descriptionTemplate: 'Verify <element> contains "${inputValue}"',
239
+ requires: { object: true, params: [{ name: 'expected_text', slot: 'value' }] },
240
+ },
241
+ verify_value: {
242
+ actionType: 'verify_value',
243
+ descriptionTemplate: 'Verify <element> contains "${inputValue}"',
244
+ requires: { object: true, params: [{ name: 'expected_value', slot: 'value' }] },
245
+ },
246
+ // requires.object:true (the recorded step carries the list element) even though the replay
247
+ // handler's needsLocator is false — reproduces the live bake shape exactly.
248
+ verify_list_visible: {
249
+ actionType: 'verify_list_visible',
250
+ descriptionTemplate: 'Verify <element> contains "${inputValue}"',
251
+ requires: { object: true, params: [{ name: 'expected_text', slot: 'value' }] },
252
+ },
253
+ verify_url_contains: {
254
+ actionType: 'verify_url_contains',
255
+ descriptionTemplate: 'Verify URL contains ${inputValue}',
256
+ requires: { object: false, params: [{ name: 'expected_url', slot: 'value' }] },
257
+ },
258
+ verify_navigation: {
259
+ actionType: 'verify_navigation',
260
+ descriptionTemplate: 'Verify page navigated to ${inputValue}',
261
+ requires: { object: false, params: [{ name: 'expected_url', slot: 'value' }] },
262
+ },
263
+ // The live wording is operator-driven (verifyCompare.ts OPERATOR_PHRASE): `<element> is
264
+ // greater than 100`, `<element> contains …`. The operator is resolved at bake and is neither
265
+ // an element nor a test-data column, so it is left out of the template shape here (kept to
266
+ // `<element>` + the `${expected_value}` param). `tolerance` applies to close_to. The
267
+ // manual-step editor seeds verify_compare from its own parseable sentence — picker subtext only.
268
+ // "equals" — NOT "matches". The frontend seeds the structured compare block by parsing this
269
+ // sentence (parseCompareFromDescription against OPERATOR_PHRASE), and 'matches' is the REGEX
270
+ // operator: it would make every freshly-added step regex-compare, so expected "5" would pass
271
+ // against "15". 'equals' is the phrase for defaultCompareSpec()'s operator. The user picks any
272
+ // other operator from the editor, which rewrites the sentence.
273
+ verify_compare: {
274
+ actionType: 'verify_compare',
275
+ descriptionTemplate: 'Verify <element> equals ${expected_value}',
276
+ requires: {
277
+ object: true,
278
+ params: [
279
+ { name: 'expected_value', slot: 'value' },
280
+ // OPTIONAL: `tolerance` is absent from the template above (verify_compare reads it for the
281
+ // close_to operator only), so the author is never asked for it — without this flag the
282
+ // step editor would demand a `${tolerance}` token the picker never inserts.
283
+ { name: 'tolerance', slot: 'value', valueType: 'number', optional: true },
284
+ ],
285
+ },
286
+ },
287
+ // Param name is load-bearing: handle-dialog.action.ts reads stepValue(ctx,
288
+ // 'expected_dialog_message', …) off the step, and recording bakes that exact name
289
+ // (generateTestSteps ~1260). A manual step must use the SAME name or the value never reaches
290
+ // the handler.
291
+ verify_dialog_message: {
292
+ actionType: 'verify_dialog_message',
293
+ descriptionTemplate: 'Verify dialog message contains "${inputValue}"',
294
+ requires: { object: false, params: [{ name: 'expected_dialog_message', slot: 'value' }] },
295
+ },
296
+ // ── Wait — element state ───────────────────────────────────────────────────────────────
297
+ wait_for_visible: {
298
+ actionType: 'wait_for_visible',
299
+ descriptionTemplate: 'Wait for <element> to be visible',
300
+ requires: { object: true },
301
+ },
302
+ wait_for_hidden: {
303
+ actionType: 'wait_for_hidden',
304
+ descriptionTemplate: 'Wait for <element> to be hidden',
305
+ requires: { object: true },
306
+ },
307
+ wait_for_attached: {
308
+ actionType: 'wait_for_attached',
309
+ descriptionTemplate: 'Wait for <element> to be attached',
310
+ requires: { object: true },
311
+ },
312
+ wait_for_detached: {
313
+ actionType: 'wait_for_detached',
314
+ descriptionTemplate: 'Wait for <element> to be detached',
315
+ requires: { object: true },
316
+ },
317
+ // ── Wait — page level ──────────────────────────────────────────────────────────────────
318
+ wait_timeout: {
319
+ actionType: 'wait_timeout',
320
+ descriptionTemplate: 'Wait ${timeout} ms',
321
+ requires: { object: false, params: [{ name: 'timeout', slot: 'value', valueType: 'number' }] },
322
+ },
323
+ // ${expected_url} is FUNCTIONAL, not decorative: both wait_for_navigation handlers now wait for
324
+ // that URL (page.waitForURL) before the load-state wait. Left empty → load-state wait only,
325
+ // i.e. the previous behaviour.
326
+ wait_for_navigation: {
327
+ actionType: 'wait_for_navigation',
328
+ descriptionTemplate: 'Wait until the ${expected_url} is fully loaded',
329
+ requires: { object: false, params: [{ name: 'expected_url', slot: 'value' }] },
330
+ },
331
+ wait_for_url: {
332
+ actionType: 'wait_for_url',
333
+ descriptionTemplate: 'Wait for URL ${inputValue}',
334
+ requires: { object: false, params: [{ name: 'expected_url', slot: 'value' }] },
335
+ },
336
+ // ── Observation ────────────────────────────────────────────────────────────────────────
337
+ // snapshot / take_screenshot / console_messages / network_requests are BACKEND-ONLY
338
+ // (no `category` on their handlers → not in the catalog), so they are NOT declared here —
339
+ // this registry mirrors the WEB CATALOG. Same reason tap / generate_locator / *_tracing
340
+ // are absent. They stay registered + executable.
341
+ // ── Advanced ───────────────────────────────────────────────────────────────────────────
342
+ handle_dialog: {
343
+ actionType: 'handle_dialog',
344
+ descriptionTemplate: 'Handle dialog',
345
+ requires: { object: false },
346
+ },
347
+ accept_dialog: {
348
+ actionType: 'accept_dialog',
349
+ descriptionTemplate: 'Accept dialog',
350
+ requires: { object: false },
351
+ },
352
+ dismiss_dialog: {
353
+ actionType: 'dismiss_dialog',
354
+ descriptionTemplate: 'Dismiss dialog',
355
+ requires: { object: false },
356
+ },
357
+ // Param name is load-bearing — handle-dialog.action.ts reads stepValue(ctx, 'dialog_prompt', …)
358
+ // and agentOrchestrator bakes that same name when recording a prompt() dialog.
359
+ send_dialog_text: {
360
+ actionType: 'send_dialog_text',
361
+ descriptionTemplate: 'Enter "${inputValue}" in dialog',
362
+ requires: { object: false, params: [{ name: 'dialog_prompt', slot: 'value' }] },
363
+ },
364
+ // evaluate is BACKEND-ONLY (no `category` on its handler → not catalogued), so it is NOT
365
+ // declared here — this registry mirrors the WEB CATALOG. It stays registered + executable.
366
+ run_code: {
367
+ actionType: 'run_code',
368
+ descriptionTemplate: 'Run code',
369
+ requires: { object: false },
370
+ },
371
+ // generate_locator is BACKEND-ONLY (no `category`) → not declared here (see Observation note).
372
+ resize: {
373
+ actionType: 'resize',
374
+ descriptionTemplate: 'Resize viewport to ${width}x${height}',
375
+ requires: { object: false, params: [{ name: 'width', slot: 'value', valueType: 'number' }, { name: 'height', slot: 'value', valueType: 'number' }] },
376
+ },
377
+ scroll: {
378
+ actionType: 'scroll',
379
+ descriptionTemplate: 'Scroll to <element>',
380
+ requires: { object: true },
381
+ },
382
+ // ── PDF ────────────────────────────────────────────────────────────────────────────────
383
+ pdf_save: {
384
+ actionType: 'pdf_save',
385
+ descriptionTemplate: 'Save page as PDF',
386
+ requires: { object: false },
387
+ },
388
+ // start_tracing / stop_tracing are BACKEND-ONLY (no `category`) → not declared here
389
+ // (see the Observation note above).
390
+ // ── Step-handler web actions (catalogued, but NOT playwright element actions) ─────────────
391
+ // SHADOW-ONLY, even more than the rest: their catalog descriptions come from the step-handler
392
+ // definitions (getActionsPayload overrides only the ACTION-handler rows, not step handlers),
393
+ // and their value carriers are runtime/global VARIABLES ($[…] / $(…)) or a window name — not
394
+ // test-data ${params} — so params stay minimal. Declared here purely so the registry covers
395
+ // the FULL web catalog.
396
+ store_run_variable: {
397
+ actionType: 'store_run_variable',
398
+ descriptionTemplate: 'Store text of the <element> to $[variable_name]',
399
+ requires: { object: true },
400
+ },
401
+ // Wording matches store_run_variable except for the $( target — safe because
402
+ // dispatcher.inferActionTypeFromDescription now exempts a $(…)-only description from the
403
+ // "Store text of" → store_run_variable rule (it used to OVERRIDE this step's action_type).
404
+ store_global_variable: {
405
+ actionType: 'store_global_variable',
406
+ descriptionTemplate: 'Store text of the <element> in $(variable_name)',
407
+ requires: { object: true },
408
+ },
409
+ switch_window: {
410
+ actionType: 'switch_window',
411
+ descriptionTemplate: 'Switch to ${window_name} window',
412
+ requires: { object: false, params: [{ name: 'window_name', slot: 'value' }] },
413
+ },
414
+ close_browser: {
415
+ actionType: 'close_browser',
416
+ descriptionTemplate: 'Close browser window',
417
+ requires: { object: false },
418
+ },
419
+ };
420
+ //# sourceMappingURL=actionSignatures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actionSignatures.js","sourceRoot":"","sources":["../../src/vendor/actionSignatures.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Simple logger utility for Walnut Agent
3
+ * Logs to console AND to a file for easy review.
4
+ *
5
+ * Log file location (in order of priority):
6
+ * 1. WALNUT_LOG_FILE env var (absolute or relative path)
7
+ * 2. Default: ./logs/walnut-agent.log (relative to process.cwd())
8
+ *
9
+ * The log file is created automatically. Logs are appended on each run.
10
+ */
11
+ export interface Logger {
12
+ info: (message: string, ...args: any[]) => void;
13
+ error: (message: string, ...args: any[]) => void;
14
+ warn: (message: string, ...args: any[]) => void;
15
+ debug: (message: string, ...args: any[]) => void;
16
+ }
17
+ /**
18
+ * Register credential values that should be redacted from all log output.
19
+ * Call this after extracting credentials from tool calls.
20
+ */
21
+ export declare function setCredentialValues(values: Set<string>): void;
22
+ export declare function createLogger(namespace: string): Logger;
23
+ /** Returns the path to the current log file (or null if file logging is disabled) */
24
+ export declare function getLogFilePath(): string | null;
25
+ /**
26
+ * Current byte size of the log file (0 if file logging is off). Snapshot this at
27
+ * execution start, then pass it to readLogSince() at completion to capture exactly
28
+ * the verbose lines written during that execution — used to ship cloud-runner
29
+ * per-execution debug logs to S3 (local desktop already keeps the same file on disk).
30
+ */
31
+ export declare function currentLogOffset(): number;
32
+ /**
33
+ * Read the log file from `sinceOffset` to end, capped to the last `maxBytes` (keeps
34
+ * the tail — the most recent, most relevant lines — if the slice is huge). Returns
35
+ * '' when file logging is off or on any read error (best-effort — never throws).
36
+ */
37
+ export declare function readLogSince(sinceOffset: number, maxBytes?: number): string;
38
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/vendor/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAChD,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IACjD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAChD,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;CAClD;AAKD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAE7D;AAuDD,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAiDtD;AAED,qFAAqF;AACrF,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAE9C;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAQzC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,SAAkB,GAAG,MAAM,CAuBpF"}