actoviq-agent-sdk 0.3.1 → 0.4.1

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 (184) hide show
  1. package/README-zh.md +47 -3
  2. package/README.md +46 -2
  3. package/bin/actoviq-tui.js +5 -0
  4. package/dist/src/cli/actoviq-react.js +256 -10
  5. package/dist/src/cli/actoviq-react.js.map +1 -1
  6. package/dist/src/cli/actoviq-tui.d.ts +3 -0
  7. package/dist/src/cli/actoviq-tui.d.ts.map +1 -0
  8. package/dist/src/cli/actoviq-tui.js +76 -0
  9. package/dist/src/cli/actoviq-tui.js.map +1 -0
  10. package/dist/src/config/actoviqSettingsStore.d.ts.map +1 -1
  11. package/dist/src/config/actoviqSettingsStore.js +8 -2
  12. package/dist/src/config/actoviqSettingsStore.js.map +1 -1
  13. package/dist/src/config/anthropicEnvMapping.d.ts +1 -1
  14. package/dist/src/config/anthropicEnvMapping.d.ts.map +1 -1
  15. package/dist/src/config/anthropicEnvMapping.js +17 -8
  16. package/dist/src/config/anthropicEnvMapping.js.map +1 -1
  17. package/dist/src/config/modelTiers.d.ts +12 -0
  18. package/dist/src/config/modelTiers.d.ts.map +1 -0
  19. package/dist/src/config/modelTiers.js +31 -0
  20. package/dist/src/config/modelTiers.js.map +1 -0
  21. package/dist/src/config/projectSessionDirectory.d.ts +8 -0
  22. package/dist/src/config/projectSessionDirectory.d.ts.map +1 -0
  23. package/dist/src/config/projectSessionDirectory.js +83 -0
  24. package/dist/src/config/projectSessionDirectory.js.map +1 -0
  25. package/dist/src/config/resolveRuntimeConfig.d.ts.map +1 -1
  26. package/dist/src/config/resolveRuntimeConfig.js +44 -16
  27. package/dist/src/config/resolveRuntimeConfig.js.map +1 -1
  28. package/dist/src/index.d.ts +19 -0
  29. package/dist/src/index.d.ts.map +1 -1
  30. package/dist/src/index.js +19 -0
  31. package/dist/src/index.js.map +1 -1
  32. package/dist/src/mcp/connectionManager.d.ts.map +1 -1
  33. package/dist/src/mcp/connectionManager.js +10 -1
  34. package/dist/src/mcp/connectionManager.js.map +1 -1
  35. package/dist/src/parity/actoviqCleanBridgeCompatSdk.d.ts.map +1 -1
  36. package/dist/src/parity/actoviqCleanBridgeCompatSdk.js +6 -2
  37. package/dist/src/parity/actoviqCleanBridgeCompatSdk.js.map +1 -1
  38. package/dist/src/provider/client.d.ts +2 -0
  39. package/dist/src/provider/client.d.ts.map +1 -1
  40. package/dist/src/provider/client.js +5 -2
  41. package/dist/src/provider/client.js.map +1 -1
  42. package/dist/src/provider/openai-model-api.d.ts.map +1 -1
  43. package/dist/src/provider/openai-model-api.js +3 -0
  44. package/dist/src/provider/openai-model-api.js.map +1 -1
  45. package/dist/src/provider/openai-types.d.ts +1 -0
  46. package/dist/src/provider/openai-types.d.ts.map +1 -1
  47. package/dist/src/runtime/actoviqAgentDefinitions.d.ts +8 -0
  48. package/dist/src/runtime/actoviqAgentDefinitions.d.ts.map +1 -0
  49. package/dist/src/runtime/actoviqAgentDefinitions.js +165 -0
  50. package/dist/src/runtime/actoviqAgentDefinitions.js.map +1 -0
  51. package/dist/src/runtime/actoviqAgents.d.ts +20 -2
  52. package/dist/src/runtime/actoviqAgents.d.ts.map +1 -1
  53. package/dist/src/runtime/actoviqAgents.js +143 -28
  54. package/dist/src/runtime/actoviqAgents.js.map +1 -1
  55. package/dist/src/runtime/actoviqBackgroundTasks.d.ts +14 -1
  56. package/dist/src/runtime/actoviqBackgroundTasks.d.ts.map +1 -1
  57. package/dist/src/runtime/actoviqBackgroundTasks.js +71 -10
  58. package/dist/src/runtime/actoviqBackgroundTasks.js.map +1 -1
  59. package/dist/src/runtime/actoviqCompact.d.ts +16 -0
  60. package/dist/src/runtime/actoviqCompact.d.ts.map +1 -1
  61. package/dist/src/runtime/actoviqCompact.js +112 -13
  62. package/dist/src/runtime/actoviqCompact.js.map +1 -1
  63. package/dist/src/runtime/actoviqModelApi.d.ts.map +1 -1
  64. package/dist/src/runtime/actoviqModelApi.js +20 -4
  65. package/dist/src/runtime/actoviqModelApi.js.map +1 -1
  66. package/dist/src/runtime/actoviqPermissions.d.ts +5 -2
  67. package/dist/src/runtime/actoviqPermissions.d.ts.map +1 -1
  68. package/dist/src/runtime/actoviqPermissions.js +83 -194
  69. package/dist/src/runtime/actoviqPermissions.js.map +1 -1
  70. package/dist/src/runtime/actoviqSessionPermissions.d.ts +5 -0
  71. package/dist/src/runtime/actoviqSessionPermissions.d.ts.map +1 -0
  72. package/dist/src/runtime/actoviqSessionPermissions.js +44 -0
  73. package/dist/src/runtime/actoviqSessionPermissions.js.map +1 -0
  74. package/dist/src/runtime/actoviqSkills.d.ts +6 -0
  75. package/dist/src/runtime/actoviqSkills.d.ts.map +1 -1
  76. package/dist/src/runtime/actoviqSkills.js +69 -1
  77. package/dist/src/runtime/actoviqSkills.js.map +1 -1
  78. package/dist/src/runtime/agentClient.d.ts +40 -3
  79. package/dist/src/runtime/agentClient.d.ts.map +1 -1
  80. package/dist/src/runtime/agentClient.js +907 -117
  81. package/dist/src/runtime/agentClient.js.map +1 -1
  82. package/dist/src/runtime/agentSession.d.ts +8 -5
  83. package/dist/src/runtime/agentSession.d.ts.map +1 -1
  84. package/dist/src/runtime/agentSession.js +11 -4
  85. package/dist/src/runtime/agentSession.js.map +1 -1
  86. package/dist/src/runtime/conversationEngine.d.ts +4 -0
  87. package/dist/src/runtime/conversationEngine.d.ts.map +1 -1
  88. package/dist/src/runtime/conversationEngine.js +87 -7
  89. package/dist/src/runtime/conversationEngine.js.map +1 -1
  90. package/dist/src/runtime/defaultActoviqAgents.d.ts.map +1 -1
  91. package/dist/src/runtime/defaultActoviqAgents.js +41 -0
  92. package/dist/src/runtime/defaultActoviqAgents.js.map +1 -1
  93. package/dist/src/storage/sessionStore.d.ts.map +1 -1
  94. package/dist/src/storage/sessionStore.js +25 -6
  95. package/dist/src/storage/sessionStore.js.map +1 -1
  96. package/dist/src/swarm/actoviqSwarm.d.ts.map +1 -1
  97. package/dist/src/swarm/actoviqSwarm.js +6 -6
  98. package/dist/src/swarm/actoviqSwarm.js.map +1 -1
  99. package/dist/src/team/agentPool.d.ts +26 -0
  100. package/dist/src/team/agentPool.d.ts.map +1 -0
  101. package/dist/src/team/agentPool.js +97 -0
  102. package/dist/src/team/agentPool.js.map +1 -0
  103. package/dist/src/team/modelTeam.d.ts +29 -0
  104. package/dist/src/team/modelTeam.d.ts.map +1 -0
  105. package/dist/src/team/modelTeam.js +879 -0
  106. package/dist/src/team/modelTeam.js.map +1 -0
  107. package/dist/src/team/pricing.d.ts +15 -0
  108. package/dist/src/team/pricing.d.ts.map +1 -0
  109. package/dist/src/team/pricing.js +80 -0
  110. package/dist/src/team/pricing.js.map +1 -0
  111. package/dist/src/team/teamDefinitions.d.ts +28 -0
  112. package/dist/src/team/teamDefinitions.d.ts.map +1 -0
  113. package/dist/src/team/teamDefinitions.js +162 -0
  114. package/dist/src/team/teamDefinitions.js.map +1 -0
  115. package/dist/src/tools/actoviqCoreTools.d.ts.map +1 -1
  116. package/dist/src/tools/actoviqCoreTools.js +6 -1
  117. package/dist/src/tools/actoviqCoreTools.js.map +1 -1
  118. package/dist/src/tools/bash/BashTool.d.ts.map +1 -1
  119. package/dist/src/tools/bash/BashTool.js +43 -10
  120. package/dist/src/tools/bash/BashTool.js.map +1 -1
  121. package/dist/src/tools/enterWorktree.d.ts +11 -0
  122. package/dist/src/tools/enterWorktree.d.ts.map +1 -0
  123. package/dist/src/tools/enterWorktree.js +79 -0
  124. package/dist/src/tools/enterWorktree.js.map +1 -0
  125. package/dist/src/tools/exitWorktree.d.ts +4 -0
  126. package/dist/src/tools/exitWorktree.d.ts.map +1 -0
  127. package/dist/src/tools/exitWorktree.js +48 -0
  128. package/dist/src/tools/exitWorktree.js.map +1 -0
  129. package/dist/src/tools/tavilySearch.d.ts +12 -0
  130. package/dist/src/tools/tavilySearch.d.ts.map +1 -0
  131. package/dist/src/tools/tavilySearch.js +139 -0
  132. package/dist/src/tools/tavilySearch.js.map +1 -0
  133. package/dist/src/tui/actoviqTui.d.ts +23 -0
  134. package/dist/src/tui/actoviqTui.d.ts.map +1 -0
  135. package/dist/src/tui/actoviqTui.js +2093 -0
  136. package/dist/src/tui/actoviqTui.js.map +1 -0
  137. package/dist/src/tui/ansi.d.ts +33 -0
  138. package/dist/src/tui/ansi.d.ts.map +1 -0
  139. package/dist/src/tui/ansi.js +127 -0
  140. package/dist/src/tui/ansi.js.map +1 -0
  141. package/dist/src/tui/editor.d.ts +58 -0
  142. package/dist/src/tui/editor.d.ts.map +1 -0
  143. package/dist/src/tui/editor.js +258 -0
  144. package/dist/src/tui/editor.js.map +1 -0
  145. package/dist/src/tui/pluginCatalog.d.ts +13 -0
  146. package/dist/src/tui/pluginCatalog.d.ts.map +1 -0
  147. package/dist/src/tui/pluginCatalog.js +78 -0
  148. package/dist/src/tui/pluginCatalog.js.map +1 -0
  149. package/dist/src/tui/screen.d.ts +28 -0
  150. package/dist/src/tui/screen.d.ts.map +1 -0
  151. package/dist/src/tui/screen.js +119 -0
  152. package/dist/src/tui/screen.js.map +1 -0
  153. package/dist/src/tui/selection.d.ts +9 -0
  154. package/dist/src/tui/selection.d.ts.map +1 -0
  155. package/dist/src/tui/selection.js +16 -0
  156. package/dist/src/tui/selection.js.map +1 -0
  157. package/dist/src/tui/transcript.d.ts +41 -0
  158. package/dist/src/tui/transcript.d.ts.map +1 -0
  159. package/dist/src/tui/transcript.js +147 -0
  160. package/dist/src/tui/transcript.js.map +1 -0
  161. package/dist/src/types.d.ts +427 -2
  162. package/dist/src/types.d.ts.map +1 -1
  163. package/dist/src/types.js.map +1 -1
  164. package/dist/src/workflow/workflowPersistence.d.ts +34 -0
  165. package/dist/src/workflow/workflowPersistence.d.ts.map +1 -0
  166. package/dist/src/workflow/workflowPersistence.js +144 -0
  167. package/dist/src/workflow/workflowPersistence.js.map +1 -0
  168. package/dist/src/workflow/workflowScriptRuntime.d.ts +22 -0
  169. package/dist/src/workflow/workflowScriptRuntime.d.ts.map +1 -0
  170. package/dist/src/workflow/workflowScriptRuntime.js +655 -0
  171. package/dist/src/workflow/workflowScriptRuntime.js.map +1 -0
  172. package/dist/src/worktree/worktreeHooks.d.ts +38 -0
  173. package/dist/src/worktree/worktreeHooks.d.ts.map +1 -0
  174. package/dist/src/worktree/worktreeHooks.js +82 -0
  175. package/dist/src/worktree/worktreeHooks.js.map +1 -0
  176. package/dist/src/worktree/worktreeInclude.d.ts +11 -0
  177. package/dist/src/worktree/worktreeInclude.d.ts.map +1 -0
  178. package/dist/src/worktree/worktreeInclude.js +65 -0
  179. package/dist/src/worktree/worktreeInclude.js.map +1 -0
  180. package/dist/src/worktree/worktreeService.d.ts +43 -0
  181. package/dist/src/worktree/worktreeService.d.ts.map +1 -0
  182. package/dist/src/worktree/worktreeService.js +356 -0
  183. package/dist/src/worktree/worktreeService.js.map +1 -0
  184. package/package.json +3 -24
@@ -1,5 +1,6 @@
1
1
  import { nowIso } from './helpers.js';
2
2
  import { checkSafety } from './safetyChecks.js';
3
+ const FILE_EDIT_TOOLS = new Set(['Write', 'Edit', 'NotebookEdit']);
3
4
  function escapeRegExp(value) {
4
5
  return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
5
6
  }
@@ -15,22 +16,24 @@ function matchesRule(rule, publicName, input) {
15
16
  }
16
17
  return wildcardToRegExp(rule.matcher).test(JSON.stringify(input ?? {}));
17
18
  }
19
+ function decision(input, behavior, reason, source, timestamp, matchedRule) {
20
+ return {
21
+ toolName: input.toolName,
22
+ publicName: input.publicName,
23
+ behavior,
24
+ reason,
25
+ source,
26
+ matchedRule,
27
+ timestamp,
28
+ };
29
+ }
18
30
  export async function decideActoviqToolPermission(input) {
19
31
  const timestamp = nowIso();
20
- // ── Step 1: Deny rules (highest priority) ─────────────────────
21
- const denyRule = input.rules.find((rule) => rule.behavior === 'deny' && matchesRule(rule, input.publicName, input.toolInput));
32
+ const denyRule = input.rules.find(rule => rule.behavior === 'deny' &&
33
+ matchesRule(rule, input.publicName, input.toolInput));
22
34
  if (denyRule) {
23
- return {
24
- toolName: input.toolName,
25
- publicName: input.publicName,
26
- behavior: 'deny',
27
- reason: `Denied by permission rule ${denyRule.toolName}.`,
28
- source: 'rule',
29
- matchedRule: denyRule.toolName,
30
- timestamp,
31
- };
35
+ return decision(input, 'deny', `Denied by permission rule ${denyRule.toolName}.`, 'rule', timestamp, denyRule.toolName);
32
36
  }
33
- // ── Step 2: Safety checks ─────────────────────────────────────
34
37
  const safetyResult = checkSafety({
35
38
  toolName: input.toolName,
36
39
  publicName: input.publicName,
@@ -38,67 +41,47 @@ export async function decideActoviqToolPermission(input) {
38
41
  workDir: input.workDir,
39
42
  });
40
43
  if (safetyResult.blocked) {
41
- return {
42
- toolName: input.toolName,
43
- publicName: input.publicName,
44
- behavior: 'deny',
45
- reason: safetyResult.reason ?? 'Blocked by safety check.',
46
- source: 'mode',
47
- timestamp,
48
- };
44
+ return decision(input, 'deny', safetyResult.reason ?? 'Blocked by safety check.', 'mode', timestamp);
49
45
  }
50
- // ── Step 3: Tool-specific checkPermissions ────────────────────
51
46
  if (input.adapter?.checkPermissions) {
52
- const result = await input.adapter.checkPermissions({
47
+ const toolDecision = await input.adapter.checkPermissions({
53
48
  mode: input.mode,
54
49
  runId: input.runId,
55
50
  sessionId: input.sessionId,
56
51
  });
57
- if (result === 'deny') {
58
- return {
59
- toolName: input.toolName,
60
- publicName: input.publicName,
61
- behavior: 'deny',
62
- reason: `Tool ${input.publicName} denied via checkPermissions.`,
63
- source: 'mode',
64
- timestamp,
65
- };
52
+ if (toolDecision === 'deny') {
53
+ return decision(input, 'deny', `Tool ${input.publicName} denied via checkPermissions.`, 'mode', timestamp);
66
54
  }
67
- if (result === 'allow') {
68
- return {
69
- toolName: input.toolName,
70
- publicName: input.publicName,
71
- behavior: 'allow',
72
- reason: `Tool ${input.publicName} allowed via checkPermissions.`,
73
- source: 'mode',
74
- timestamp,
75
- };
55
+ if (toolDecision === 'allow') {
56
+ return decision(input, 'allow', `Tool ${input.publicName} allowed via checkPermissions.`, 'mode', timestamp);
76
57
  }
77
- if (result === 'ask') {
78
- return resolveActoviqAskPermission(input, {
79
- toolName: input.toolName,
80
- publicName: input.publicName,
81
- behavior: 'deny',
82
- reason: `Tool ${input.publicName} requires approval via checkPermissions.`,
83
- source: 'mode',
84
- timestamp,
85
- }, timestamp);
58
+ if (toolDecision === 'ask') {
59
+ return resolveActoviqAskPermission(input, decision(input, 'deny', `Tool ${input.publicName} requires approval via checkPermissions.`, 'mode', timestamp), timestamp);
86
60
  }
87
61
  }
88
- // ── Step 4: Ask rules ─────────────────────────────────────────
89
- const askRule = input.rules.find((rule) => rule.behavior === 'ask' && matchesRule(rule, input.publicName, input.toolInput));
62
+ const askRule = input.rules.find(rule => rule.behavior === 'ask' &&
63
+ matchesRule(rule, input.publicName, input.toolInput));
90
64
  if (askRule) {
91
- return resolveActoviqAskPermission(input, {
92
- toolName: input.toolName,
93
- publicName: input.publicName,
94
- behavior: 'deny',
95
- reason: `Tool ${input.publicName} requires approval before execution.`,
96
- source: 'rule',
97
- matchedRule: askRule.toolName,
98
- timestamp,
99
- }, timestamp);
65
+ return resolveActoviqAskPermission(input, decision(input, 'deny', `Tool ${input.publicName} requires approval before execution.`, 'rule', timestamp, askRule.toolName), timestamp);
66
+ }
67
+ if (input.adapter?.requiresUserInteraction?.()) {
68
+ return resolveActoviqAskPermission(input, decision(input, 'deny', `Tool ${input.publicName} requires interactive approval.`, 'mode', timestamp), timestamp);
69
+ }
70
+ if (input.mode === 'bypassPermissions') {
71
+ return decision(input, 'allow', 'Bypass-permissions mode allows tool execution.', 'mode', timestamp);
72
+ }
73
+ const allowRule = input.rules.find(rule => rule.behavior === 'allow' &&
74
+ matchesRule(rule, input.publicName, input.toolInput));
75
+ if (allowRule) {
76
+ return decision(input, 'allow', `Allowed by permission rule ${allowRule.toolName}.`, 'rule', timestamp, allowRule.toolName);
77
+ }
78
+ const readOnly = input.adapter?.isReadOnly?.(input.toolInput) ?? false;
79
+ if (readOnly) {
80
+ return decision(input, 'allow', `${input.mode} mode allows read-only tool execution.`, 'mode', timestamp);
81
+ }
82
+ if (input.mode === 'acceptEdits' && FILE_EDIT_TOOLS.has(input.publicName)) {
83
+ return decision(input, 'allow', 'acceptEdits mode allows workspace file edits.', 'mode', timestamp);
100
84
  }
101
- // ── Step 5: Classifier ────────────────────────────────────────
102
85
  if (input.classifier) {
103
86
  const outcome = await input.classifier({
104
87
  runId: input.runId,
@@ -110,40 +93,16 @@ export async function decideActoviqToolPermission(input) {
110
93
  prompt: input.prompt,
111
94
  iteration: input.iteration,
112
95
  });
113
- if (outcome) {
114
- if (outcome.behavior === 'deny') {
115
- return {
116
- toolName: input.toolName,
117
- publicName: input.publicName,
118
- behavior: 'deny',
119
- reason: outcome.reason,
120
- source: 'classifier',
121
- timestamp,
122
- };
123
- }
124
- if (outcome.behavior === 'ask') {
125
- return resolveActoviqAskPermission(input, {
126
- toolName: input.toolName,
127
- publicName: input.publicName,
128
- behavior: 'deny',
129
- reason: outcome.reason,
130
- source: 'classifier',
131
- timestamp,
132
- }, timestamp);
133
- }
134
- if (outcome.behavior === 'allow') {
135
- return {
136
- toolName: input.toolName,
137
- publicName: input.publicName,
138
- behavior: 'allow',
139
- reason: outcome.reason,
140
- source: 'classifier',
141
- timestamp,
142
- };
143
- }
96
+ if (outcome?.behavior === 'allow') {
97
+ return decision(input, 'allow', outcome.reason, 'classifier', timestamp);
98
+ }
99
+ if (outcome?.behavior === 'deny') {
100
+ return decision(input, 'deny', outcome.reason, 'classifier', timestamp);
101
+ }
102
+ if (outcome?.behavior === 'ask') {
103
+ return resolveActoviqAskPermission(input, decision(input, 'deny', outcome.reason, 'classifier', timestamp), timestamp);
144
104
  }
145
105
  }
146
- // ── Step 6: canUseTool callback ────────────────────────────────
147
106
  if (input.canUseTool) {
148
107
  const outcome = await input.canUseTool({
149
108
  runId: input.runId,
@@ -155,106 +114,44 @@ export async function decideActoviqToolPermission(input) {
155
114
  prompt: input.prompt,
156
115
  iteration: input.iteration,
157
116
  });
158
- if (outcome) {
159
- if (outcome.behavior === 'deny') {
160
- return {
161
- toolName: input.toolName,
162
- publicName: input.publicName,
163
- behavior: 'deny',
164
- reason: outcome.reason ?? `Denied by canUseTool.`,
165
- source: 'canUseTool',
166
- timestamp,
167
- };
168
- }
169
- if (outcome.behavior === 'ask') {
170
- return resolveActoviqAskPermission(input, {
171
- toolName: input.toolName,
172
- publicName: input.publicName,
173
- behavior: 'deny',
174
- reason: outcome.reason ?? `Tool ${input.publicName} requires approval.`,
175
- source: 'canUseTool',
176
- timestamp,
177
- }, timestamp);
178
- }
179
- return {
180
- toolName: input.toolName,
181
- publicName: input.publicName,
182
- behavior: 'allow',
183
- reason: outcome.reason ?? `Allowed by canUseTool.`,
184
- source: 'canUseTool',
185
- timestamp,
186
- };
117
+ if (outcome?.behavior === 'allow') {
118
+ return decision(input, 'allow', outcome.reason ?? 'Allowed by canUseTool.', 'canUseTool', timestamp);
119
+ }
120
+ if (outcome?.behavior === 'deny') {
121
+ return decision(input, 'deny', outcome.reason ?? 'Denied by canUseTool.', 'canUseTool', timestamp);
122
+ }
123
+ if (outcome?.behavior === 'ask') {
124
+ return resolveActoviqAskPermission(input, decision(input, 'deny', outcome.reason ?? `Tool ${input.publicName} requires approval.`, 'canUseTool', timestamp), timestamp);
187
125
  }
188
126
  }
189
- // ── Step 7: Always-allow rules ───────────────────────────────
190
- const allowRule = input.rules.find((rule) => rule.behavior === 'allow' && matchesRule(rule, input.publicName, input.toolInput));
191
- if (allowRule) {
192
- return {
193
- toolName: input.toolName,
194
- publicName: input.publicName,
195
- behavior: 'allow',
196
- reason: `Allowed by permission rule ${allowRule.toolName}.`,
197
- source: 'rule',
198
- matchedRule: allowRule.toolName,
199
- timestamp,
200
- };
127
+ const destructive = input.adapter?.isDestructive?.(input.toolInput) ??
128
+ (input.adapter?.isReadOnly ? !readOnly : false);
129
+ if (input.mode === 'plan' && destructive) {
130
+ return decision(input, 'deny', 'Plan mode blocks mutating tools until the plan is approved.', 'mode', timestamp);
201
131
  }
202
- // ── Step 8: Mode-based fallback ─────────────────────────────
203
- switch (input.mode) {
204
- case 'bypassPermissions':
205
- return {
206
- toolName: input.toolName,
207
- publicName: input.publicName,
208
- behavior: 'allow',
209
- reason: 'Bypass-permissions mode allows tool execution.',
210
- source: 'mode',
211
- timestamp,
212
- };
213
- case 'plan': {
214
- const readOnly = input.adapter?.isReadOnly?.(input.toolInput) ?? false;
215
- return {
216
- toolName: input.toolName,
217
- publicName: input.publicName,
218
- behavior: readOnly ? 'allow' : 'deny',
219
- reason: readOnly
220
- ? 'Plan mode allows read-only tool execution.'
221
- : 'Plan mode blocks mutating tools until the plan is approved.',
222
- source: 'mode',
223
- timestamp,
224
- };
225
- }
226
- case 'acceptEdits': {
227
- const classified = input.adapter?.isReadOnly !== undefined;
228
- return {
229
- toolName: input.toolName,
230
- publicName: input.publicName,
231
- behavior: classified ? 'allow' : 'deny',
232
- reason: classified
233
- ? 'acceptEdits mode allows classified tools.'
234
- : 'acceptEdits mode blocks unsupported high-risk tools.',
235
- source: 'mode',
236
- timestamp,
237
- };
132
+ if (destructive) {
133
+ if (!input.approver) {
134
+ return decision(input, 'deny', `${input.mode} mode requires approval for mutating tools, but no approver is available.`, 'mode', timestamp);
238
135
  }
239
- case 'auto':
240
- case 'default':
241
- default:
242
- return {
243
- toolName: input.toolName,
244
- publicName: input.publicName,
245
- behavior: 'allow',
246
- reason: `${input.mode} mode allows tool execution by default.`,
247
- source: 'mode',
248
- timestamp,
249
- };
136
+ return resolveActoviqAskPermission(input, decision(input, 'deny', `${input.mode} mode requires approval for mutating tools.`, 'mode', timestamp), timestamp);
250
137
  }
138
+ if (input.mode !== 'plan' && input.adapter?.isReadOnly === undefined) {
139
+ return decision(input, 'allow', `${input.mode} mode allows tools that do not declare a mutation classification.`, 'mode', timestamp);
140
+ }
141
+ if (input.mode === 'plan') {
142
+ return decision(input, 'deny', 'Plan mode blocks mutating tools until the plan is approved.', 'mode', timestamp);
143
+ }
144
+ if (!input.approver) {
145
+ return decision(input, 'allow', `${input.mode} mode allows unclassified tools when no interactive approver is configured.`, 'mode', timestamp);
146
+ }
147
+ return resolveActoviqAskPermission(input, decision(input, 'deny', `${input.mode} mode requires approval for mutating or unclassified tools.`, 'mode', timestamp), timestamp);
251
148
  }
252
149
  async function resolveActoviqAskPermission(input, baseDecision, timestamp) {
253
150
  if (!input.approver) {
254
151
  return {
255
152
  ...baseDecision,
256
153
  behavior: 'deny',
257
- reason: `${baseDecision.reason} Approval is required, but interactive approval is unavailable in the clean SDK path.`,
154
+ reason: `${baseDecision.reason} Approval is required, but no approver is available.`,
258
155
  timestamp,
259
156
  };
260
157
  }
@@ -273,17 +170,9 @@ async function resolveActoviqAskPermission(input, baseDecision, timestamp) {
273
170
  source: baseDecision.source === 'rule' ? 'rule' : 'classifier',
274
171
  matchedRule: baseDecision.matchedRule,
275
172
  });
276
- return {
277
- toolName: baseDecision.toolName,
278
- publicName: baseDecision.publicName,
279
- behavior: approval?.behavior === 'allow' ? 'allow' : 'deny',
280
- reason: approval?.reason ??
281
- (approval?.behavior === 'allow'
282
- ? `Approved ${baseDecision.publicName} for execution.`
283
- : `${baseDecision.reason} Approval was denied.`),
284
- source: 'approver',
285
- matchedRule: baseDecision.matchedRule,
286
- timestamp,
287
- };
173
+ return decision(input, approval?.behavior === 'allow' ? 'allow' : 'deny', approval?.reason ??
174
+ (approval?.behavior === 'allow'
175
+ ? `Approved ${baseDecision.publicName} for execution.`
176
+ : `${baseDecision.reason} Approval was denied.`), 'approver', timestamp, baseDecision.matchedRule);
288
177
  }
289
178
  //# sourceMappingURL=actoviqPermissions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"actoviqPermissions.js","sourceRoot":"","sources":["../../../src/runtime/actoviqPermissions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actoviqPermissions.js","sourceRoot":"","sources":["../../../src/runtime/actoviqPermissions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ActoviqSessionPermissionState } from '../types.js';
2
+ export declare const ACTOVIQ_SESSION_PERMISSION_STATE_KEY = "__actoviqPermissionState";
3
+ export declare function getPersistedActoviqSessionPermissionState(metadata: Record<string, unknown> | undefined): ActoviqSessionPermissionState;
4
+ export declare function serializeActoviqSessionPermissionState(state: ActoviqSessionPermissionState): Record<string, unknown>;
5
+ //# sourceMappingURL=actoviqSessionPermissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actoviqSessionPermissions.d.ts","sourceRoot":"","sources":["../../../src/runtime/actoviqSessionPermissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,6BAA6B,EAC9B,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,oCAAoC,6BAA6B,CAAC;AAU/E,wBAAgB,yCAAyC,CACvD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC5C,6BAA6B,CAiC/B;AAED,wBAAgB,sCAAsC,CACpD,KAAK,EAAE,6BAA6B,GACnC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKzB"}
@@ -0,0 +1,44 @@
1
+ export const ACTOVIQ_SESSION_PERMISSION_STATE_KEY = '__actoviqPermissionState';
2
+ const PERMISSION_MODES = new Set([
3
+ 'default',
4
+ 'acceptEdits',
5
+ 'bypassPermissions',
6
+ 'plan',
7
+ 'auto',
8
+ ]);
9
+ export function getPersistedActoviqSessionPermissionState(metadata) {
10
+ const raw = metadata?.[ACTOVIQ_SESSION_PERMISSION_STATE_KEY];
11
+ if (!raw || typeof raw !== 'object') {
12
+ return { permissions: [] };
13
+ }
14
+ const record = raw;
15
+ const mode = typeof record.mode === 'string' && PERMISSION_MODES.has(record.mode)
16
+ ? record.mode
17
+ : undefined;
18
+ const permissions = Array.isArray(record.permissions)
19
+ ? record.permissions.flatMap((entry) => {
20
+ if (!entry || typeof entry !== 'object') {
21
+ return [];
22
+ }
23
+ const rule = entry;
24
+ if (typeof rule.toolName !== 'string' ||
25
+ (rule.behavior !== 'allow' && rule.behavior !== 'deny' && rule.behavior !== 'ask')) {
26
+ return [];
27
+ }
28
+ return [{
29
+ toolName: rule.toolName,
30
+ behavior: rule.behavior,
31
+ matcher: typeof rule.matcher === 'string' ? rule.matcher : undefined,
32
+ source: typeof rule.source === 'string' ? rule.source : undefined,
33
+ }];
34
+ })
35
+ : [];
36
+ return { mode, permissions };
37
+ }
38
+ export function serializeActoviqSessionPermissionState(state) {
39
+ return {
40
+ mode: state.mode,
41
+ permissions: state.permissions.map(rule => ({ ...rule })),
42
+ };
43
+ }
44
+ //# sourceMappingURL=actoviqSessionPermissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actoviqSessionPermissions.js","sourceRoot":"","sources":["../../../src/runtime/actoviqSessionPermissions.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,oCAAoC,GAAG,0BAA0B,CAAC;AAE/E,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAwB;IACtD,SAAS;IACT,aAAa;IACb,mBAAmB;IACnB,MAAM;IACN,MAAM;CACP,CAAC,CAAC;AAEH,MAAM,UAAU,yCAAyC,CACvD,QAA6C;IAE7C,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC,oCAAoC,CAAC,CAAC;IAC7D,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,MAAM,GAAG,GAA8B,CAAC;IAC9C,MAAM,IAAI,GACR,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,IAA6B,CAAC;QAC3F,CAAC,CAAE,MAAM,CAAC,IAA8B;QACxC,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;QACnD,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAA2B,EAAE;YAC5D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACxC,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,IAAI,GAAG,KAAgC,CAAC;YAC9C,IACE,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ;gBACjC,CAAC,IAAI,CAAC,QAAQ,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,EAClF,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,OAAO,CAAC;oBACN,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,OAAO,EAAE,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;oBACpE,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;iBAClE,CAAC,CAAC;QACL,CAAC,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,sCAAsC,CACpD,KAAoC;IAEpC,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;KAC1D,CAAC;AACJ,CAAC"}
@@ -44,5 +44,11 @@ export declare function loadActoviqSkillDefinitions(options: {
44
44
  loadDefaultSkillDirectories?: boolean;
45
45
  }): Promise<ActoviqSkillDefinition[]>;
46
46
  export declare function resolveActoviqSkillPrompt(definition: ActoviqSkillDefinition, args: string, context: ActoviqSkillPromptContext): Promise<ActoviqSkillPromptBuildResult>;
47
+ /**
48
+ * Returns true if `relativePath` (cwd-relative, forward slashes) matches any of
49
+ * the gitignore-style `patterns`. Supports `dir/**` prefixes and `*` / `**`
50
+ * globs — enough for skill `paths:` frontmatter without a new dependency.
51
+ */
52
+ export declare function skillPathsMatch(patterns: string[], relativePath: string): boolean;
47
53
  export {};
48
54
  //# sourceMappingURL=actoviqSkills.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"actoviqSkills.d.ts","sourceRoot":"","sources":["../../../src/runtime/actoviqSkills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actoviqSkills.d.ts","sourceRoot":"","sources":["../../../src/runtime/actoviqSkills.ts"],"names":[],"mappings":"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"}
@@ -136,6 +136,30 @@ const DEFAULT_BUNDLED_SKILLS = [
136
136
  source: 'bundled',
137
137
  loadedFrom: 'bundled',
138
138
  },
139
+ {
140
+ name: 'tavily',
141
+ description: 'AI-optimized web search via Tavily API. Use for research, fact-checking, current events, and gathering authoritative sources.',
142
+ whenToUse: 'Use when you need comprehensive web research, current events lookup, domain-specific search, or AI-generated answer summaries. Best for research tasks, news queries, fact-checking, and gathering authoritative sources.',
143
+ prompt: [
144
+ 'You are executing the /tavily skill for web research.',
145
+ '',
146
+ 'Research protocol:',
147
+ '1. Use TavilySearch tool to find authoritative sources.',
148
+ '2. Start with depth="basic" for most queries (faster, cheaper).',
149
+ '3. Use depth="advanced" for complex or nuanced topics.',
150
+ '4. Use topic="news" ONLY for current events (last 7 days).',
151
+ '5. Filter domains when you know trusted sources for the topic.',
152
+ '6. Start with max_results=5, increase only if needed.',
153
+ '',
154
+ 'Always cite sources in your response with markdown hyperlinks.',
155
+ '',
156
+ 'Task:',
157
+ '$ARGUMENTS',
158
+ ].join('\n'),
159
+ source: 'bundled',
160
+ loadedFrom: 'bundled',
161
+ tools: [], // will use globally available TavilySearch tool
162
+ },
139
163
  ];
140
164
  export function skill(definition) {
141
165
  return normalizeActoviqSkillDefinition(definition);
@@ -149,6 +173,9 @@ export function summarizeActoviqSkillDefinition(definition) {
149
173
  argumentHint: normalized.argumentHint,
150
174
  argNames: [...(normalized.argNames ?? [])],
151
175
  model: normalized.model,
176
+ effort: normalized.effort,
177
+ version: normalized.version,
178
+ displayName: normalized.displayName,
152
179
  source: normalized.source ?? 'custom',
153
180
  loadedFrom: normalized.loadedFrom ?? 'custom',
154
181
  context: normalized.context ?? 'inline',
@@ -424,7 +451,9 @@ async function loadActoviqSkillsDirectory(rootDir, source) {
424
451
  return [];
425
452
  }
426
453
  const loaded = await Promise.all(entries.map(async (entry) => {
427
- if (!entry.isDirectory()) {
454
+ // Accept real directories AND symlinks to directories — skill managers
455
+ // commonly install skills via symlink. readFile() below follows the link.
456
+ if (!entry.isDirectory() && !entry.isSymbolicLink()) {
428
457
  return null;
429
458
  }
430
459
  const skillRoot = path.join(rootDir, entry.name);
@@ -542,6 +571,9 @@ function createDiskSkillDefinition(input) {
542
571
  argNames: argNames.length > 0 ? argNames : undefined,
543
572
  prompt,
544
573
  model: input.frontmatter.model?.trim() || undefined,
574
+ effort: parseEffortField(input.frontmatter.effort),
575
+ version: input.frontmatter.version?.trim() || undefined,
576
+ displayName: input.frontmatter.name?.trim() || undefined,
545
577
  disableModelInvocation: parseBooleanField(input.frontmatter['disable-model-invocation']),
546
578
  userInvocable: input.frontmatter['user-invocable'] == null
547
579
  ? true
@@ -601,6 +633,42 @@ function parseBooleanField(value) {
601
633
  }
602
634
  return /^(1|true|yes|on)$/iu.test(value.trim());
603
635
  }
636
+ const EFFORT_VALUES = ['low', 'medium', 'high', 'max'];
637
+ function parseEffortField(value) {
638
+ if (!value) {
639
+ return undefined;
640
+ }
641
+ const normalized = value.trim().toLowerCase();
642
+ return EFFORT_VALUES.includes(normalized)
643
+ ? normalized
644
+ : undefined;
645
+ }
646
+ /**
647
+ * Returns true if `relativePath` (cwd-relative, forward slashes) matches any of
648
+ * the gitignore-style `patterns`. Supports `dir/**` prefixes and `*` / `**`
649
+ * globs — enough for skill `paths:` frontmatter without a new dependency.
650
+ */
651
+ export function skillPathsMatch(patterns, relativePath) {
652
+ const target = relativePath.replace(/\\/gu, '/');
653
+ for (const raw of patterns) {
654
+ const pattern = raw.replace(/\\/gu, '/').replace(/\/\*\*$/u, '');
655
+ if (!pattern || pattern === '**') {
656
+ continue;
657
+ }
658
+ if (target === pattern || target.startsWith(`${pattern}/`)) {
659
+ return true;
660
+ }
661
+ const body = pattern
662
+ .replace(/[.+^${}()|[\]\\]/gu, '\\$&')
663
+ .replace(/\*\*/gu, '')
664
+ .replace(/\*/gu, '[^/]*')
665
+ .replace(//gu, '.*');
666
+ if (new RegExp(`^${body}$`, 'u').test(target)) {
667
+ return true;
668
+ }
669
+ }
670
+ return false;
671
+ }
604
672
  function extractDescriptionFromMarkdown(content) {
605
673
  const lines = content
606
674
  .split(/\r?\n/iu)