@ai-setting/roy-agent-core 1.7.53 → 1.7.56

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 (124) hide show
  1. package/dist/config/index.js +7 -7
  2. package/dist/env/agent/agent-component.d.ts +30 -0
  3. package/dist/env/agent/index.js +13 -12
  4. package/dist/env/commands/index.js +7 -7
  5. package/dist/env/context/index.js +3 -3
  6. package/dist/env/debug/index.js +7 -7
  7. package/dist/env/environment.d.ts +7 -0
  8. package/dist/env/error-reply.d.ts +184 -0
  9. package/dist/env/event-source/event-source-handlers.d.ts +9 -23
  10. package/dist/env/event-source/index.js +17 -17
  11. package/dist/env/hook/index.js +5 -5
  12. package/dist/env/index.js +41 -40
  13. package/dist/env/llm/adapter-ai-sdk.d.ts +6 -0
  14. package/dist/env/llm/adapter-pi-ai.d.ts +152 -2
  15. package/dist/env/llm/adapter.d.ts +21 -1
  16. package/dist/env/llm/index.js +10 -10
  17. package/dist/env/llm/invoke.d.ts +74 -2
  18. package/dist/env/llm/llm.d.ts +38 -0
  19. package/dist/env/llm/outbound-defense.d.ts +140 -0
  20. package/dist/env/llm/reasoning-defense.d.ts +104 -0
  21. package/dist/env/llm/types.d.ts +26 -0
  22. package/dist/env/log-trace/decorator.d.ts +46 -3
  23. package/dist/env/log-trace/index.d.ts +1 -0
  24. package/dist/env/log-trace/index.js +33 -7
  25. package/dist/env/log-trace/trace-filters.d.ts +127 -0
  26. package/dist/env/mcp/index.js +7 -7
  27. package/dist/env/memory/index.js +7 -7
  28. package/dist/env/plugin/index.js +7 -7
  29. package/dist/env/prompt/index.js +8 -8
  30. package/dist/env/prompt/prompts-index.d.ts +1 -1
  31. package/dist/env/session/index.js +11 -10
  32. package/dist/env/session/session-component.d.ts +4 -0
  33. package/dist/env/session/storage/index.js +5 -3
  34. package/dist/env/skill/index.js +7 -7
  35. package/dist/env/task/backend/index.js +0 -2
  36. package/dist/env/task/backend/types.d.ts +0 -11
  37. package/dist/env/task/delegate/index.js +8 -8
  38. package/dist/env/task/index.js +13 -13
  39. package/dist/env/task/plugins/card-chat-routing.d.ts +42 -89
  40. package/dist/env/task/plugins/index.js +10 -10
  41. package/dist/env/task/plugins/lark-card-patch-notifier.d.ts +0 -51
  42. package/dist/env/task/plugins/lark-cli-task-notify-plugin.d.ts +14 -31
  43. package/dist/env/task/plugins/per-task-group-chat-plugin.d.ts +4 -4
  44. package/dist/env/task/storage/index.js +2 -2
  45. package/dist/env/task/tools/index.js +3 -3
  46. package/dist/env/tool/built-in/index.js +3 -3
  47. package/dist/env/tool/index.js +9 -9
  48. package/dist/env/workflow/engine/engine.d.ts +65 -0
  49. package/dist/env/workflow/engine/index.js +12 -12
  50. package/dist/env/workflow/hooks/index.js +7 -7
  51. package/dist/env/workflow/index.js +23 -22
  52. package/dist/env/workflow/nodes/index.js +2 -2
  53. package/dist/env/workflow/nodes/tool-node.d.ts +6 -0
  54. package/dist/env/workflow/plugins/index.js +8 -8
  55. package/dist/env/workflow/service/index.js +2 -2
  56. package/dist/env/workflow/storage/index.js +3 -3
  57. package/dist/env/workflow/tools/index.js +15 -14
  58. package/dist/env/workflow/tools/workflow-validate-tool.d.ts +11 -2
  59. package/dist/env/workflow/types/run.d.ts +19 -0
  60. package/dist/env/workflow/utils/agent-session-metadata.d.ts +13 -0
  61. package/dist/env/workflow/utils/index.js +5 -5
  62. package/dist/env/workflow/utils/redact-command-secrets.d.ts +70 -0
  63. package/dist/env/workflow/utils/shell-dialect-lint.d.ts +75 -0
  64. package/dist/env/workflow/utils/validate-workflow-definition.d.ts +22 -0
  65. package/dist/index.d.ts +1 -1
  66. package/dist/index.js +82 -56
  67. package/dist/shared/@ai-setting/{roy-agent-core-k25gv86p.js → roy-agent-core-0b3fdnn3.js} +1 -1
  68. package/dist/shared/@ai-setting/{roy-agent-core-vvxb9522.js → roy-agent-core-0bmk44ye.js} +71 -10
  69. package/dist/shared/@ai-setting/{roy-agent-core-k8b440n3.js → roy-agent-core-16t0zfbk.js} +1 -1
  70. package/dist/shared/@ai-setting/{roy-agent-core-4z3rq5gw.js → roy-agent-core-1pnfkspm.js} +2 -2
  71. package/dist/shared/@ai-setting/{roy-agent-core-na73mym1.js → roy-agent-core-202v00x4.js} +213 -2
  72. package/dist/shared/@ai-setting/{roy-agent-core-ph5qbqcx.js → roy-agent-core-2044fbsd.js} +471 -134
  73. package/dist/shared/@ai-setting/{roy-agent-core-fs36xgcs.js → roy-agent-core-3dkzqqsd.js} +1 -1
  74. package/dist/shared/@ai-setting/{roy-agent-core-qm9jda8p.js → roy-agent-core-3kz6934b.js} +1 -1
  75. package/dist/shared/@ai-setting/{roy-agent-core-tjg71zqp.js → roy-agent-core-3mc6vmvj.js} +1 -1
  76. package/dist/shared/@ai-setting/{roy-agent-core-tdbv7ff4.js → roy-agent-core-40xzbjtm.js} +2 -2
  77. package/dist/shared/@ai-setting/{roy-agent-core-athdr2m0.js → roy-agent-core-4zy2v3br.js} +10 -2
  78. package/dist/shared/@ai-setting/{roy-agent-core-t37wbysj.js → roy-agent-core-5gw6w424.js} +4 -4
  79. package/dist/shared/@ai-setting/{roy-agent-core-978b6wfx.js → roy-agent-core-5psjwd08.js} +1 -1
  80. package/dist/shared/@ai-setting/{roy-agent-core-7evvpfwc.js → roy-agent-core-5rxs0ra3.js} +1 -1
  81. package/dist/shared/@ai-setting/{roy-agent-core-gdsqp6j8.js → roy-agent-core-6masakz4.js} +45 -0
  82. package/dist/shared/@ai-setting/{roy-agent-core-stnddvx9.js → roy-agent-core-6qgq7h1g.js} +4 -4
  83. package/dist/shared/@ai-setting/{roy-agent-core-6167phd4.js → roy-agent-core-833t16n1.js} +3 -3
  84. package/dist/shared/@ai-setting/{roy-agent-core-2k4xffaa.js → roy-agent-core-8cgtwytv.js} +3 -3
  85. package/dist/shared/@ai-setting/{roy-agent-core-rx16h2m1.js → roy-agent-core-97eyghsp.js} +2 -2
  86. package/dist/shared/@ai-setting/{roy-agent-core-fvs48d38.js → roy-agent-core-98aa9r0x.js} +12 -7
  87. package/dist/shared/@ai-setting/{roy-agent-core-3tv1q6f2.js → roy-agent-core-9nv586rw.js} +57 -19
  88. package/dist/shared/@ai-setting/roy-agent-core-b599jgyd.js +578 -0
  89. package/dist/shared/@ai-setting/{roy-agent-core-yd21n6c7.js → roy-agent-core-bwzy00t2.js} +12 -5
  90. package/dist/shared/@ai-setting/{roy-agent-core-dwx9hjwx.js → roy-agent-core-c6at31ra.js} +1 -1
  91. package/dist/shared/@ai-setting/{roy-agent-core-1cv9j4dg.js → roy-agent-core-d14h726p.js} +3 -3
  92. package/dist/shared/@ai-setting/{roy-agent-core-4sx6sdb2.js → roy-agent-core-d4jpn06f.js} +22 -9
  93. package/dist/shared/@ai-setting/{roy-agent-core-39xejr39.js → roy-agent-core-e0wbq0qq.js} +7 -7
  94. package/dist/shared/@ai-setting/{roy-agent-core-vrsxhw9e.js → roy-agent-core-e677am8e.js} +1 -1
  95. package/dist/shared/@ai-setting/{roy-agent-core-hch2geta.js → roy-agent-core-ezsyyjxw.js} +21 -190
  96. package/dist/shared/@ai-setting/{roy-agent-core-ne2t1pay.js → roy-agent-core-f8sp1txg.js} +2 -2
  97. package/dist/shared/@ai-setting/{roy-agent-core-ak4dc3kg.js → roy-agent-core-gn8f4rhs.js} +1 -1
  98. package/dist/shared/@ai-setting/{roy-agent-core-qcspfszy.js → roy-agent-core-gngjkw3b.js} +1 -1
  99. package/dist/shared/@ai-setting/{roy-agent-core-9jzysq50.js → roy-agent-core-heft3j4c.js} +2 -2
  100. package/dist/shared/@ai-setting/{roy-agent-core-5apmk4qw.js → roy-agent-core-jszgaevt.js} +1 -1
  101. package/dist/shared/@ai-setting/{roy-agent-core-nde5gzta.js → roy-agent-core-m8n0dffe.js} +1 -1
  102. package/dist/shared/@ai-setting/{roy-agent-core-x8n1r7h4.js → roy-agent-core-n3b7ztms.js} +189 -8
  103. package/dist/shared/@ai-setting/{roy-agent-core-4vpk40ss.js → roy-agent-core-nhk0dsxr.js} +13 -13
  104. package/dist/shared/@ai-setting/{roy-agent-core-j8e92gj8.js → roy-agent-core-nntphgww.js} +1 -60
  105. package/dist/shared/@ai-setting/{roy-agent-core-8s9jd2qy.js → roy-agent-core-nra8vfrs.js} +1 -1
  106. package/dist/shared/@ai-setting/{roy-agent-core-pk1b3kvf.js → roy-agent-core-ns3pbyz4.js} +1 -1
  107. package/dist/shared/@ai-setting/{roy-agent-core-7g03zkkb.js → roy-agent-core-pemxr5n4.js} +1 -1
  108. package/dist/shared/@ai-setting/{roy-agent-core-skzjs973.js → roy-agent-core-pjxa78mp.js} +5 -5
  109. package/dist/shared/@ai-setting/{roy-agent-core-p8ak03s0.js → roy-agent-core-q7zksbw0.js} +117 -315
  110. package/dist/shared/@ai-setting/{roy-agent-core-zd3ddm4k.js → roy-agent-core-qjjf4tjb.js} +1 -1
  111. package/dist/shared/@ai-setting/{roy-agent-core-qamktze3.js → roy-agent-core-qyqnmz8c.js} +1 -1
  112. package/dist/shared/@ai-setting/{roy-agent-core-9csa89jx.js → roy-agent-core-r9qe0ghe.js} +2 -2
  113. package/dist/shared/@ai-setting/{roy-agent-core-h93v6p6y.js → roy-agent-core-tc7gw38m.js} +2 -2
  114. package/dist/shared/@ai-setting/{roy-agent-core-35s1w7tc.js → roy-agent-core-v2188rnk.js} +157 -85
  115. package/dist/shared/@ai-setting/{roy-agent-core-p2r27era.js → roy-agent-core-vmg30n5x.js} +8 -8
  116. package/dist/shared/@ai-setting/{roy-agent-core-rnwr39b0.js → roy-agent-core-w7hnjhvx.js} +5 -3
  117. package/dist/shared/@ai-setting/{roy-agent-core-dv714bqh.js → roy-agent-core-wafk25ff.js} +1 -1
  118. package/dist/shared/@ai-setting/{roy-agent-core-brwzs8wf.js → roy-agent-core-xcq04fq0.js} +5 -5
  119. package/dist/shared/@ai-setting/{roy-agent-core-2gay3sjt.js → roy-agent-core-yg247mk4.js} +1 -1
  120. package/dist/shared/@ai-setting/{roy-agent-core-zy3hqfwg.js → roy-agent-core-yv9x4wmg.js} +631 -35
  121. package/dist/shared/@ai-setting/{roy-agent-core-yhsssn86.js → roy-agent-core-zmeka63k.js} +1 -1
  122. package/dist/test-utils/child-process-mock.d.ts +73 -0
  123. package/package.json +2 -2
  124. package/dist/shared/@ai-setting/roy-agent-core-dsevjbck.js +0 -245
@@ -9,6 +9,19 @@ export declare function updateAgentSessionStatus(agentSessions: AgentSessionRef[
9
9
  * Convenience wrapper over updateAgentSessionStatus for symmetry with Failed/Stopped.
10
10
  */
11
11
  export declare function markAgentSessionCompleted(agentSessions: AgentSessionRef[] | undefined, nodeId: string): AgentSessionRef[];
12
+ /**
13
+ * Register (or refresh) a node's agent sub-session reference.
14
+ *
15
+ * Replaces an existing entry for the same `nodeId` (refresh + reset to
16
+ * 'active') or appends a new one. Returns a new array; does not mutate input.
17
+ *
18
+ * Task #4412 C1: this used to be inline in `AgentNode.createAgentSubSession()`
19
+ * operating directly on the metadata it had just read, which loses entries when
20
+ * sibling agent nodes register concurrently. Extracted here so the engine can
21
+ * run it *inside* its serialized metadata queue (where the array it receives is
22
+ * guaranteed to be the current one).
23
+ */
24
+ export declare function upsertAgentSession(agentSessions: AgentSessionRef[] | undefined, nodeId: string, agentSessionId: string): AgentSessionRef[];
12
25
  /**
13
26
  * Mark a single node's agent session as 'failed'.
14
27
  */
@@ -14,24 +14,24 @@ import {
14
14
  hasClosedOutputContract,
15
15
  validateTemplateContracts,
16
16
  validateWorkflowDefinition
17
- } from "../../../shared/@ai-setting/roy-agent-core-na73mym1.js";
17
+ } from "../../../shared/@ai-setting/roy-agent-core-202v00x4.js";
18
18
  import {
19
19
  TemplateResolver,
20
20
  init_template_resolver,
21
21
  resolveTemplateString,
22
22
  resolveTemplates
23
- } from "../../../shared/@ai-setting/roy-agent-core-tjg71zqp.js";
23
+ } from "../../../shared/@ai-setting/roy-agent-core-3mc6vmvj.js";
24
24
  import {
25
25
  getFromMapWithNormalization,
26
26
  init_node_id_utils
27
27
  } from "../../../shared/@ai-setting/roy-agent-core-ddwa0n6h.js";
28
- import"../../../shared/@ai-setting/roy-agent-core-8s9jd2qy.js";
28
+ import"../../../shared/@ai-setting/roy-agent-core-nra8vfrs.js";
29
29
  import"../../../shared/@ai-setting/roy-agent-core-jrj30vq3.js";
30
30
  import"../../../shared/@ai-setting/roy-agent-core-e25xkv53.js";
31
31
  import {
32
32
  TracedAs,
33
33
  init_decorator
34
- } from "../../../shared/@ai-setting/roy-agent-core-dsevjbck.js";
34
+ } from "../../../shared/@ai-setting/roy-agent-core-b599jgyd.js";
35
35
  import"../../../shared/@ai-setting/roy-agent-core-8seq65bp.js";
36
36
  import"../../../shared/@ai-setting/roy-agent-core-jnszp0jq.js";
37
37
  import {
@@ -208,7 +208,7 @@ class ExecutionStateBuilder {
208
208
  }
209
209
  }
210
210
  __legacyDecorateClassTS([
211
- TracedAs("recovery.builder.build", { recordParams: true, recordResult: true, log: true })
211
+ TracedAs("recovery.builder.build", { recordParams: true, recordResult: false, log: true })
212
212
  ], ExecutionStateBuilder.prototype, "build", null);
213
213
  __legacyDecorateClassTS([
214
214
  TracedAs("recovery.builder.parseMessages", { recordParams: true, recordResult: true, log: true })
@@ -0,0 +1,70 @@
1
+ /**
2
+ * @fileoverview redact-command-secrets.ts — Mask inline secrets in shell commands
3
+ * before they are embedded in a user/agent-visible error message (Task #4392 P0-2).
4
+ *
5
+ * Background: #4385 §5.5 diff-1 asks for `Tool exited with code N` to be enriched
6
+ * with the command that was run. That command may legitimately contain inline
7
+ * credentials (`twine upload --password=...`, `curl -H "Authorization: Bearer ..."`,
8
+ * `PIP_INDEX_TOKEN=... npm publish`), which must NOT leak into:
9
+ * - `workflow.node.end` session messages,
10
+ * - trace span attributes,
11
+ * - the LLM context of the next turn.
12
+ *
13
+ * This helper is a *best-effort* shell-string masker (complementary to
14
+ * `sensitive-redact.ts`, which only redacts object **field names**). It never
15
+ * tries to parse shell; it matches the common credential shapes:
16
+ *
17
+ * 1. `KEY=value` / `KEY: value` / `--flag value` / `--flag=value`
18
+ * where KEY looks sensitive (`ASSIGNMENT_RE`, `FLAG_RE`).
19
+ * 2. `<Scheme> <credential>` auth headers — `Authorization: Bearer <token>`,
20
+ * `Basic <base64>`, `Token <value>`, `Digest <value>` (`AUTH_SCHEME_RE`).
21
+ * The value is a *separate* word from the scheme, hence its own rule.
22
+ * 3. URL query credentials — `?token=`, `&api_key=`, `&secret=`, `&sig=`
23
+ * (`URL_QUERY_RE`).
24
+ * 4. URL userinfo credentials — `https://user:pass@host` (`URL_USERINFO_RE`).
25
+ * 5. Short-option credentials — `curl -u user:pass`, `docker login -p <pw>`,
26
+ * `mysql -pVALUE` (`SHORT_CRED_RE`).
27
+ *
28
+ * ## Why rules 2–5 exist (Task #4419, from #4417 §B-1)
29
+ *
30
+ * The original implementation only had rules 1, and its bare-value branch stops
31
+ * at the first whitespace. `Authorization: Bearer <token>` is *two* words, so it
32
+ * masked `Bearer` and left the token intact. #4417 measured 9 of 14 real command
33
+ * shapes still leaking. Rules 2–5 close those holes.
34
+ *
35
+ * ## Ordering / idempotency
36
+ *
37
+ * The rules are applied in a fixed order and each rule already skips values that
38
+ * equal the `[REDACTED]` sentinel, so `redact(redact(x)) === redact(x)` holds.
39
+ * Rule 2 is applied **before** rule 1: rule 1 would otherwise see
40
+ * `Authorization: Bearer` and mask only the scheme word, leaving an
41
+ * `Authorization: [REDACTED] <token>` remainder that rule 2 can no longer anchor.
42
+ *
43
+ * ## Non-goals
44
+ *
45
+ * - No shell parsing / word-splitting (quoting, `$VAR` expansion, heredocs).
46
+ * - Environment-variable *references* (`$TOKEN`, `${TOKEN}`) are left alone —
47
+ * the variable name is not itself a secret, and masking it destroys the
48
+ * diagnostic value of the message.
49
+ */
50
+ /**
51
+ * Mask inline secrets inside a single shell command string.
52
+ *
53
+ * Idempotent: masked values (`[REDACTED]`) are left as-is.
54
+ *
55
+ * @param command - The raw command string (may be multi-line).
56
+ * @returns The command with sensitive values replaced by `[REDACTED]`.
57
+ */
58
+ export declare function redactCommandSecrets(command: string): string;
59
+ /**
60
+ * Collapse a multi-line command into a single readable line and truncate it.
61
+ *
62
+ * Rationale: error messages are rendered as one line in `workflow.node.end`
63
+ * messages and in most logs; embedding raw newlines makes them unreadable and
64
+ * breaks naive `grep`-based diagnosis.
65
+ *
66
+ * @param command - Raw command (possibly multi-line, possibly huge).
67
+ * @param maxLen - Maximum length of the returned string (default 120).
68
+ * @returns Single-line, whitespace-normalized, truncated command.
69
+ */
70
+ export declare function summarizeCommand(command: string, maxLen?: number): string;
@@ -0,0 +1,75 @@
1
+ /**
2
+ * @fileoverview Shell dialect lint for workflow `tool` node commands
3
+ * (Task #4392 P0-3; root cause proven in Task #4385 §3.2.1).
4
+ *
5
+ * ## Why this exists
6
+ *
7
+ * The built-in `bash` tool spawns its command with Node's
8
+ * `child_process.spawn(command, [], { shell: true })`
9
+ * (see `env/tool/built-in/bash-effect.ts`). On POSIX, `shell: true` resolves to
10
+ * **`/bin/sh`**, which on Debian/Ubuntu is a symlink to **dash** — *not* bash.
11
+ *
12
+ * Every bash-only construct therefore fails inside a workflow tool node. Worse,
13
+ * half of them fail **silently**:
14
+ *
15
+ * | construct | dash behaviour | exit | loud? |
16
+ * | -------------------- | ----------------------------- | ---- | ----- |
17
+ * | `set -o pipefail` | `Illegal option -o pipefail` | 2 | ✅ |
18
+ * | `${PIPESTATUS[0]}` | `Bad substitution` | 2 | ✅ |
19
+ * | `${V//a/b}` | `Bad substitution` | 2 | ✅ |
20
+ * | `${BASH_SOURCE[0]}` | `Bad substitution` | 2 | ✅ |
21
+ * | `A=(1 2 3)` | `Syntax error: "(" unexpected`| 2 | ✅ |
22
+ * | `function f() {}` | `Syntax error: "(" unexpected`| 2 | ✅ |
23
+ * | `[[ ... ]]` | `[[: not found` | 127 | ✅ |
24
+ * | `source <file>` | `source: not found` | 0 | ❌ |
25
+ * | `echo -e "a\tb"` | prints a literal `-e` | 0 | ❌ |
26
+ * | `$RANDOM` | empty string | 0 | ❌ |
27
+ *
28
+ * Task #4385 measured **63** `/bin/sh:` signature hits across 45 sessions, and
29
+ * these account for 27 of the workflow-creator's `exit 2` failures.
30
+ *
31
+ * ## Severity policy
32
+ *
33
+ * These findings are **warnings, never errors**. The 76 workflows already in
34
+ * `workflows.db` must keep validating cleanly, and a `dash`-safe workflow can
35
+ * legitimately contain the *string* `pipefail` inside an embedded heredoc that
36
+ * is executed by `bash -c` on purpose. Blocking on a heuristic regex would be
37
+ * wrong; surfacing it loudly for the author to judge is right.
38
+ *
39
+ * ## What is deliberately NOT flagged
40
+ *
41
+ * - `. <file>` (POSIX dot-command) — the correct replacement for `source`.
42
+ * - `$?`, `$0`, `$1`… — POSIX.
43
+ * - `[ ... ]` — POSIX test.
44
+ * - `sed 's/a/b/'` — no `${...}` involved.
45
+ * - Text inside shell **comments** (`# ...`) — cannot fail at runtime.
46
+ */
47
+ /** A single detected bash-ism. */
48
+ export interface ShellDialectFinding {
49
+ /** Stable rule name, e.g. `pipefail`. Used in machine-readable output. */
50
+ name: string;
51
+ /** Actionable replacement hint written for an LLM/tool author to act on. */
52
+ fix: string;
53
+ /** Short excerpt of the offending command (surrounding context). */
54
+ excerpt: string;
55
+ }
56
+ /**
57
+ * Detect bash-only constructs in a shell command intended for the `bash` tool.
58
+ *
59
+ * @param command - The raw command string (from `config.command`).
60
+ * @returns One finding per *distinct* rule that matched. Repeated occurrences of
61
+ * the same rule are collapsed (a 50-line script using `$RANDOM` ten
62
+ * times should produce one warning, not ten).
63
+ */
64
+ export declare function lintShellDialect(command: string): ShellDialectFinding[];
65
+ /**
66
+ * Render findings as one actionable line each, prefixed with the node id.
67
+ *
68
+ * Format is deliberately stable so it can be asserted in tests and grepped in
69
+ * logs:
70
+ * `[shell-dialect] node "build-x" uses bash-only "pipefail": <fix> | near: <excerpt>`
71
+ *
72
+ * @param nodeId - The workflow node id that owns the command.
73
+ * @param findings - Output of `lintShellDialect`.
74
+ */
75
+ export declare function formatShellDialectFindings(nodeId: string, findings: ShellDialectFinding[]): string[];
@@ -13,6 +13,14 @@
13
13
  * read `.result` off a **tool** node (which has no such field) and the
14
14
  * engine silently substituted an empty string.
15
15
  *
16
+ * Layer 3 — **Shell dialect lint** (Task #4392 P0-3, see
17
+ * `shell-dialect-lint.ts`): the `bash` tool spawns with `shell: true`,
18
+ * i.e. `/bin/sh` = dash. bash-only constructs (`set -o pipefail`,
19
+ * `${PIPESTATUS[0]}`, `[[ ]]`, `source`, arrays, `$RANDOM`, `echo -e`, ...)
20
+ * either fail loudly or -- worse -- silently no-op. Reported as **warning**
21
+ * only: existing registered workflows must not be invalidated by a
22
+ * heuristic regex.
23
+ *
16
24
  * Wraps everything in a defensive try/catch so callers (workflow_add tool,
17
25
  * `workflow add` CLI, workflow_validate tool, TaskTagPlugin.extractWorkflow)
18
26
  * always get a consistent `{ valid, errors, warnings, infos }` shape — even
@@ -46,6 +54,14 @@ export interface ValidateWorkflowOptions {
46
54
  * incrementally).
47
55
  */
48
56
  skipTemplateContracts?: boolean;
57
+ /**
58
+ * Skip the Layer-3 shell-dialect lint. Defaults to `false`.
59
+ *
60
+ * Layer 3 emits **warnings only**, so there is rarely a reason to disable it;
61
+ * this switch exists for corpus/regression tests that pin the exact warning
62
+ * set of already-registered workflows.
63
+ */
64
+ lintShellDialect?: boolean;
49
65
  }
50
66
  /**
51
67
  * Validate a workflow definition (structure + template contracts).
@@ -55,3 +71,9 @@ export interface ValidateWorkflowOptions {
55
71
  * @returns `{ valid, errors, warnings, infos, findings }` — never throws.
56
72
  */
57
73
  export declare function validateWorkflowDefinition(definition: unknown, options?: ValidateWorkflowOptions): ValidateWorkflowResult;
74
+ /**
75
+ * Walk every `tool` node of a definition and lint its shell command(s).
76
+ *
77
+ * @returns Formatted, actionable warning lines (empty when clean).
78
+ */
79
+ export declare function collectShellDialectWarnings(definition: unknown): string[];
package/dist/index.d.ts CHANGED
@@ -18,7 +18,7 @@ export type { ToolContext } from "./env/tool/types";
18
18
  export type { ToolHookContext } from "./env/tool/tool-component";
19
19
  export { AgentComponent, type AgentComponentConfig, type AgentContext, AgentComponentConfigSchema, type Plugin, type HookPoint, type HookContext, } from "./env/agent";
20
20
  export { AgentRegistry, type AgentDefinition, type AgentType, type AgentConfig, type ExportOptions, } from "./env/agent/agent-registry";
21
- export { LogTraceComponent, type LogTraceConfig, type LogTraceComponentOptions, LogTraceConfigSchema, Traced, TracedAs, TracedLightweight, wrapFunction, type TracedOptions, createLogger, getLogDir, setLogDirOverride, setQuietMode, isQuietMode, getLogLevels, getLogLevel, setLoggerConfigComponent, SQLiteSpanStorage, type SpanContext, type SpanAttributes, type Span, type TraceInfo, type SpanStorage, type LogLevel, type LoggerConfig, type ILogger, SpanKind, SpanStatus, OTelTracerProvider, getTracerProvider, resetTracerProvider, type OTelTracer, type OTelSpan, type SpanOptions, propagation, } from "./env/log-trace";
21
+ export { LogTraceComponent, type LogTraceConfig, type LogTraceComponentOptions, LogTraceConfigSchema, Traced, TracedAs, TracedLightweight, wrapFunction, type TracedOptions, createLogger, getLogDir, setLogDirOverride, setQuietMode, isQuietMode, getLogLevels, getLogLevel, setLoggerConfigComponent, SQLiteSpanStorage, type SpanContext, type SpanAttributes, type Span, type TraceInfo, type SpanStorage, type LogLevel, type LoggerConfig, type ILogger, SpanKind, SpanStatus, OTelTracerProvider, getTracerProvider, resetTracerProvider, type OTelTracer, type OTelSpan, type SpanOptions, propagation, isTraceFullMode, resetTraceFullModeCache, llmInvokeParamFilter, llmInvokeResultFilter, messagesParamFilter, toolExecParamFilter, toolInvokeParamFilter, toolExecResultFilter, embedParamFilter, embedResultFilter, envQueryParamFilter, agentRunParamFilter, recordSessionMessagesParamFilter, } from "./env/log-trace";
22
22
  export { DebugComponent, TraceFormatter, TreeFormatter, ReplFormatter, type TraceDataSource, type TraceParserOptions, } from "./env/debug";
23
23
  export type { TraceEntry, TraceTreeNode, ParserOptions, LogDiscoveryOptions, TraceIdInfo, TraceSummary, TraceAction, LogLevel as DebugLogLevel, FormatOptions, } from "./env/debug";
24
24
  export { PromptComponent, type PromptComponentOptions, } from "./env/prompt/prompt-component";
package/dist/index.js CHANGED
@@ -8,10 +8,10 @@ import {
8
8
  grepTool,
9
9
  readFileTool,
10
10
  writeFileTool
11
- } from "./shared/@ai-setting/roy-agent-core-athdr2m0.js";
11
+ } from "./shared/@ai-setting/roy-agent-core-4zy2v3br.js";
12
12
  import {
13
13
  ConfigComponent
14
- } from "./shared/@ai-setting/roy-agent-core-qamktze3.js";
14
+ } from "./shared/@ai-setting/roy-agent-core-qyqnmz8c.js";
15
15
  import {
16
16
  getUnderstandImageLLMProvider,
17
17
  resetUnderstandImageLLMProvider,
@@ -21,7 +21,7 @@ import {
21
21
  import {
22
22
  PromptComponent,
23
23
  PromptStore
24
- } from "./shared/@ai-setting/roy-agent-core-stnddvx9.js";
24
+ } from "./shared/@ai-setting/roy-agent-core-6qgq7h1g.js";
25
25
  import {
26
26
  LLMComponent,
27
27
  LLMConfigSchema,
@@ -29,17 +29,11 @@ import {
29
29
  ModelLimitsSchema,
30
30
  ProviderCapabilitiesSchema,
31
31
  ProviderConfigSchema
32
- } from "./shared/@ai-setting/roy-agent-core-p8ak03s0.js";
32
+ } from "./shared/@ai-setting/roy-agent-core-q7zksbw0.js";
33
33
  import"./shared/@ai-setting/roy-agent-core-adg9ghbt.js";
34
- import {
35
- ATTACH_FILE_MAX_BYTES,
36
- isMediaType,
37
- parseImageInput,
38
- sniffMimeType
39
- } from "./shared/@ai-setting/roy-agent-core-zjdzk1gg.js";
40
34
  import {
41
35
  MemoryComponent
42
- } from "./shared/@ai-setting/roy-agent-core-ak4dc3kg.js";
36
+ } from "./shared/@ai-setting/roy-agent-core-gn8f4rhs.js";
43
37
  import"./shared/@ai-setting/roy-agent-core-g1s2h0e5.js";
44
38
  import {
45
39
  MemoryPlugin,
@@ -47,7 +41,7 @@ import {
47
41
  } from "./shared/@ai-setting/roy-agent-core-j5c3chtn.js";
48
42
  import {
49
43
  DebugComponent
50
- } from "./shared/@ai-setting/roy-agent-core-k25gv86p.js";
44
+ } from "./shared/@ai-setting/roy-agent-core-0b3fdnn3.js";
51
45
  import {
52
46
  ReplFormatter,
53
47
  TraceFormatter,
@@ -55,30 +49,30 @@ import {
55
49
  } from "./shared/@ai-setting/roy-agent-core-rvv6ydff.js";
56
50
  import {
57
51
  SkillComponent
58
- } from "./shared/@ai-setting/roy-agent-core-2gay3sjt.js";
52
+ } from "./shared/@ai-setting/roy-agent-core-yg247mk4.js";
59
53
  import"./shared/@ai-setting/roy-agent-core-psvxt4c9.js";
60
54
  import"./shared/@ai-setting/roy-agent-core-3ztzc83c.js";
61
55
  import {
62
56
  closeDatabase
63
- } from "./shared/@ai-setting/roy-agent-core-978b6wfx.js";
64
- import"./shared/@ai-setting/roy-agent-core-nde5gzta.js";
57
+ } from "./shared/@ai-setting/roy-agent-core-5psjwd08.js";
58
+ import"./shared/@ai-setting/roy-agent-core-m8n0dffe.js";
65
59
  import {
66
60
  BaseEnvironment,
67
61
  generateDescendingId,
68
62
  generateId
69
- } from "./shared/@ai-setting/roy-agent-core-4sx6sdb2.js";
63
+ } from "./shared/@ai-setting/roy-agent-core-d4jpn06f.js";
70
64
  import {
71
65
  TaskComponent
72
- } from "./shared/@ai-setting/roy-agent-core-39xejr39.js";
66
+ } from "./shared/@ai-setting/roy-agent-core-e0wbq0qq.js";
73
67
  import"./shared/@ai-setting/roy-agent-core-amkqnyzy.js";
74
68
  import {
75
69
  SQLiteTaskStore,
76
70
  getDefaultTaskDbPath
77
- } from "./shared/@ai-setting/roy-agent-core-qm9jda8p.js";
78
- import"./shared/@ai-setting/roy-agent-core-7g03zkkb.js";
71
+ } from "./shared/@ai-setting/roy-agent-core-3kz6934b.js";
72
+ import"./shared/@ai-setting/roy-agent-core-pemxr5n4.js";
79
73
  import"./shared/@ai-setting/roy-agent-core-rn57psp0.js";
80
74
  import"./shared/@ai-setting/roy-agent-core-8gxth0eh.js";
81
- import"./shared/@ai-setting/roy-agent-core-p2r27era.js";
75
+ import"./shared/@ai-setting/roy-agent-core-vmg30n5x.js";
82
76
  import"./shared/@ai-setting/roy-agent-core-tbrn9wdm.js";
83
77
  import {
84
78
  BountyIMInstance,
@@ -92,7 +86,7 @@ import {
92
86
  larkCliHandler,
93
87
  resolveBountyIMSystemPrompt,
94
88
  timerHandler
95
- } from "./shared/@ai-setting/roy-agent-core-ph5qbqcx.js";
89
+ } from "./shared/@ai-setting/roy-agent-core-2044fbsd.js";
96
90
  import {
97
91
  BUILT_IN_EVENT_SOURCE_TYPES,
98
92
  BUILT_IN_EVENT_SOURCE_TYPE_LIST,
@@ -105,33 +99,33 @@ import {
105
99
  import {
106
100
  LogTraceComponent,
107
101
  LogTraceConfigSchema
108
- } from "./shared/@ai-setting/roy-agent-core-rnwr39b0.js";
102
+ } from "./shared/@ai-setting/roy-agent-core-w7hnjhvx.js";
109
103
  import {
110
104
  TaskTagPlugin,
111
105
  createAutoTaskPlugin
112
- } from "./shared/@ai-setting/roy-agent-core-hch2geta.js";
106
+ } from "./shared/@ai-setting/roy-agent-core-ezsyyjxw.js";
113
107
  import {
114
108
  EventStoreImpl,
115
109
  getSharedEventStore,
116
110
  resetSharedEventStore,
117
111
  setSharedEventStore
118
- } from "./shared/@ai-setting/roy-agent-core-yhsssn86.js";
112
+ } from "./shared/@ai-setting/roy-agent-core-zmeka63k.js";
119
113
  import {
120
114
  TaskHookPoints
121
115
  } from "./shared/@ai-setting/roy-agent-core-1pg0fepg.js";
122
116
  import {
123
117
  getBuiltInPrompt,
124
118
  getBuiltInPromptNames
125
- } from "./shared/@ai-setting/roy-agent-core-gdsqp6j8.js";
126
- import"./shared/@ai-setting/roy-agent-core-brwzs8wf.js";
127
- import"./shared/@ai-setting/roy-agent-core-j8e92gj8.js";
119
+ } from "./shared/@ai-setting/roy-agent-core-6masakz4.js";
120
+ import"./shared/@ai-setting/roy-agent-core-xcq04fq0.js";
121
+ import"./shared/@ai-setting/roy-agent-core-nntphgww.js";
128
122
  import {
129
123
  WorkflowComponent
130
- } from "./shared/@ai-setting/roy-agent-core-4vpk40ss.js";
124
+ } from "./shared/@ai-setting/roy-agent-core-nhk0dsxr.js";
131
125
  import {
132
126
  init_node_registry_helper,
133
127
  registerDecoratorNodeType
134
- } from "./shared/@ai-setting/roy-agent-core-vrsxhw9e.js";
128
+ } from "./shared/@ai-setting/roy-agent-core-e677am8e.js";
135
129
  import {
136
130
  Edge,
137
131
  NodeAs,
@@ -140,53 +134,53 @@ import {
140
134
  createWorkflowFromClass
141
135
  } from "./shared/@ai-setting/roy-agent-core-h0x19xgn.js";
142
136
  import"./shared/@ai-setting/roy-agent-core-1ce3fqrk.js";
143
- import"./shared/@ai-setting/roy-agent-core-vvxb9522.js";
137
+ import"./shared/@ai-setting/roy-agent-core-0bmk44ye.js";
144
138
  import {
145
139
  SessionComponent
146
- } from "./shared/@ai-setting/roy-agent-core-yd21n6c7.js";
140
+ } from "./shared/@ai-setting/roy-agent-core-bwzy00t2.js";
147
141
  import {
148
142
  MemorySessionStore
149
- } from "./shared/@ai-setting/roy-agent-core-h93v6p6y.js";
143
+ } from "./shared/@ai-setting/roy-agent-core-tc7gw38m.js";
150
144
  import"./shared/@ai-setting/roy-agent-core-hhrg314p.js";
151
- import"./shared/@ai-setting/roy-agent-core-7evvpfwc.js";
152
- import"./shared/@ai-setting/roy-agent-core-35s1w7tc.js";
145
+ import"./shared/@ai-setting/roy-agent-core-5rxs0ra3.js";
146
+ import"./shared/@ai-setting/roy-agent-core-v2188rnk.js";
153
147
  import"./shared/@ai-setting/roy-agent-core-6atd905e.js";
154
- import"./shared/@ai-setting/roy-agent-core-6167phd4.js";
155
- import"./shared/@ai-setting/roy-agent-core-x8n1r7h4.js";
148
+ import"./shared/@ai-setting/roy-agent-core-833t16n1.js";
149
+ import"./shared/@ai-setting/roy-agent-core-n3b7ztms.js";
156
150
  import"./shared/@ai-setting/roy-agent-core-1db4vpc6.js";
157
151
  import"./shared/@ai-setting/roy-agent-core-ze068vc9.js";
158
- import"./shared/@ai-setting/roy-agent-core-fs36xgcs.js";
159
- import"./shared/@ai-setting/roy-agent-core-9csa89jx.js";
152
+ import"./shared/@ai-setting/roy-agent-core-3dkzqqsd.js";
153
+ import"./shared/@ai-setting/roy-agent-core-r9qe0ghe.js";
160
154
  import"./shared/@ai-setting/roy-agent-core-7exqwax1.js";
161
- import"./shared/@ai-setting/roy-agent-core-na73mym1.js";
162
- import"./shared/@ai-setting/roy-agent-core-tjg71zqp.js";
155
+ import"./shared/@ai-setting/roy-agent-core-202v00x4.js";
156
+ import"./shared/@ai-setting/roy-agent-core-3mc6vmvj.js";
163
157
  import"./shared/@ai-setting/roy-agent-core-ddwa0n6h.js";
164
- import"./shared/@ai-setting/roy-agent-core-8s9jd2qy.js";
158
+ import"./shared/@ai-setting/roy-agent-core-nra8vfrs.js";
165
159
  import"./shared/@ai-setting/roy-agent-core-jrj30vq3.js";
166
160
  import"./shared/@ai-setting/roy-agent-core-rvxg1wps.js";
167
161
  import {
168
162
  CommandsComponent
169
- } from "./shared/@ai-setting/roy-agent-core-zd3ddm4k.js";
163
+ } from "./shared/@ai-setting/roy-agent-core-qjjf4tjb.js";
170
164
  import {
171
165
  AgentComponent,
172
166
  AgentComponentConfigSchema
173
- } from "./shared/@ai-setting/roy-agent-core-3tv1q6f2.js";
167
+ } from "./shared/@ai-setting/roy-agent-core-9nv586rw.js";
174
168
  import {
175
169
  ToolComponent,
176
170
  ToolRegistry,
177
171
  ToolValidator
178
- } from "./shared/@ai-setting/roy-agent-core-fvs48d38.js";
172
+ } from "./shared/@ai-setting/roy-agent-core-98aa9r0x.js";
179
173
  import"./shared/@ai-setting/roy-agent-core-kzg1jwt8.js";
180
174
  import {
181
175
  AgentRegistry
182
- } from "./shared/@ai-setting/roy-agent-core-rx16h2m1.js";
176
+ } from "./shared/@ai-setting/roy-agent-core-97eyghsp.js";
183
177
  import {
184
178
  XDG_PATHS,
185
179
  getXDGPath,
186
180
  getXDGPaths
187
181
  } from "./shared/@ai-setting/roy-agent-core-qxnbvgwe.js";
188
- import"./shared/@ai-setting/roy-agent-core-dv714bqh.js";
189
- import"./shared/@ai-setting/roy-agent-core-pk1b3kvf.js";
182
+ import"./shared/@ai-setting/roy-agent-core-wafk25ff.js";
183
+ import"./shared/@ai-setting/roy-agent-core-ns3pbyz4.js";
190
184
  import {
191
185
  buildOpencodeHeaders,
192
186
  createInvokeConfig,
@@ -195,7 +189,13 @@ import {
195
189
  isOpencodeEndpoint,
196
190
  isOpencodeProvider,
197
191
  parseModelString
198
- } from "./shared/@ai-setting/roy-agent-core-zy3hqfwg.js";
192
+ } from "./shared/@ai-setting/roy-agent-core-yv9x4wmg.js";
193
+ import {
194
+ ATTACH_FILE_MAX_BYTES,
195
+ isMediaType,
196
+ parseImageInput,
197
+ sniffMimeType
198
+ } from "./shared/@ai-setting/roy-agent-core-zjdzk1gg.js";
199
199
  import"./shared/@ai-setting/roy-agent-core-c1v263jn.js";
200
200
  import {
201
201
  AskUserError,
@@ -203,14 +203,14 @@ import {
203
203
  } from "./shared/@ai-setting/roy-agent-core-e25xkv53.js";
204
204
  import {
205
205
  PluginComponent
206
- } from "./shared/@ai-setting/roy-agent-core-t37wbysj.js";
206
+ } from "./shared/@ai-setting/roy-agent-core-5gw6w424.js";
207
207
  import"./shared/@ai-setting/roy-agent-core-64f22h1g.js";
208
208
  import {
209
209
  BasePlugin
210
210
  } from "./shared/@ai-setting/roy-agent-core-az13yzmc.js";
211
211
  import {
212
212
  McpComponent
213
- } from "./shared/@ai-setting/roy-agent-core-dwx9hjwx.js";
213
+ } from "./shared/@ai-setting/roy-agent-core-c6at31ra.js";
214
214
  import"./shared/@ai-setting/roy-agent-core-8t7wny6v.js";
215
215
  import {
216
216
  AgentError,
@@ -226,25 +226,38 @@ import {
226
226
  import"./shared/@ai-setting/roy-agent-core-7hh0brvs.js";
227
227
  import {
228
228
  BaseComponent
229
- } from "./shared/@ai-setting/roy-agent-core-tdbv7ff4.js";
229
+ } from "./shared/@ai-setting/roy-agent-core-40xzbjtm.js";
230
230
  import {
231
231
  createHook,
232
232
  createPriorityHook,
233
233
  init_hook
234
- } from "./shared/@ai-setting/roy-agent-core-qcspfszy.js";
234
+ } from "./shared/@ai-setting/roy-agent-core-gngjkw3b.js";
235
235
  import {
236
236
  HookManager,
237
237
  globalHookManager
238
- } from "./shared/@ai-setting/roy-agent-core-4z3rq5gw.js";
239
- import"./shared/@ai-setting/roy-agent-core-k8b440n3.js";
240
- import"./shared/@ai-setting/roy-agent-core-5apmk4qw.js";
238
+ } from "./shared/@ai-setting/roy-agent-core-1pnfkspm.js";
239
+ import"./shared/@ai-setting/roy-agent-core-16t0zfbk.js";
240
+ import"./shared/@ai-setting/roy-agent-core-jszgaevt.js";
241
241
  import {
242
242
  Traced,
243
243
  TracedAs,
244
244
  TracedLightweight,
245
+ agentRunParamFilter,
246
+ embedParamFilter,
247
+ embedResultFilter,
248
+ envQueryParamFilter,
245
249
  init_decorator,
250
+ isTraceFullMode,
251
+ llmInvokeParamFilter,
252
+ llmInvokeResultFilter,
253
+ messagesParamFilter,
254
+ recordSessionMessagesParamFilter,
255
+ resetTraceFullModeCache,
256
+ toolExecParamFilter,
257
+ toolExecResultFilter,
258
+ toolInvokeParamFilter,
246
259
  wrapFunction
247
- } from "./shared/@ai-setting/roy-agent-core-dsevjbck.js";
260
+ } from "./shared/@ai-setting/roy-agent-core-b599jgyd.js";
248
261
  import {
249
262
  OTelTracerProvider,
250
263
  SpanKind,
@@ -504,6 +517,9 @@ export {
504
517
  wrapFunction,
505
518
  validateEventSourceConfig,
506
519
  understandImageTool,
520
+ toolInvokeParamFilter,
521
+ toolExecResultFilter,
522
+ toolExecParamFilter,
507
523
  timerHandler,
508
524
  sniffMimeType,
509
525
  setUnderstandImageLLMProvider,
@@ -514,14 +530,20 @@ export {
514
530
  resolveBountyIMSystemPrompt,
515
531
  resetUnderstandImageLLMProvider,
516
532
  resetTracerProvider,
533
+ resetTraceFullModeCache,
517
534
  resetSharedEventStore,
518
535
  registerDecoratorNodeType,
536
+ recordSessionMessagesParamFilter,
519
537
  readFileTool,
520
538
  propagation,
521
539
  parseModelString,
522
540
  parseImageInput,
541
+ messagesParamFilter,
542
+ llmInvokeResultFilter,
543
+ llmInvokeParamFilter,
523
544
  larkCliHandler,
524
545
  isValidEventSourceType,
546
+ isTraceFullMode,
525
547
  isRoyError,
526
548
  isQuietMode,
527
549
  isOpencodeProvider,
@@ -552,6 +574,9 @@ export {
552
574
  generateId,
553
575
  generateDescendingId,
554
576
  extractMetadata,
577
+ envQueryParamFilter,
578
+ embedResultFilter,
579
+ embedParamFilter,
555
580
  editFileTool,
556
581
  createWorkflowFromClass,
557
582
  createPriorityHook,
@@ -568,6 +593,7 @@ export {
568
593
  buildDefaultBountyIMSystemPrompt,
569
594
  bountyIMHandler,
570
595
  bashTool,
596
+ agentRunParamFilter,
571
597
  XDG_PATHS,
572
598
  WorkflowEdges,
573
599
  WorkflowComponent,
@@ -4,7 +4,7 @@ import {
4
4
  } from "./roy-agent-core-rvv6ydff.js";
5
5
  import {
6
6
  BaseComponent
7
- } from "./roy-agent-core-tdbv7ff4.js";
7
+ } from "./roy-agent-core-40xzbjtm.js";
8
8
  import {
9
9
  __require
10
10
  } from "./roy-agent-core-fs0mn2jk.js";