ask-app-server 0.6.0 → 0.7.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/lib/ask/app_server/agent_adapter.rb +3 -1
- data/lib/ask/app_server/session_manager.rb +22 -1
- data/lib/ask/app_server/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 72683929fd8e34512612ab2b8695d3016e3dd1d4382eec1e2107f4ec59ba99ff
|
|
4
|
+
data.tar.gz: 4527f49da84ded81cbf1caa7b09ccf469c79047be15df463b43afdf8c73e90c0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9e7a8a5697ee9445f72c3ad0c0904256c7b61a7c25d86e7250a1345e84a0aed05972529f5fe30f7beb8fad8e540571df75927b607fd13dfbdedec1fbedf052ac
|
|
7
|
+
data.tar.gz: 06abc620c5c2b0f28a42ca9cdf16f3a9f60321828d937d10033a5594f69ad09fb3f3d8f01e7ee59754c9399f144edbd282be54fd03c177e26beb3028f47453d8
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.7.0] - 2026-09-23
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Accept a host-owned project-rules object or workspace-aware provider in
|
|
10
|
+
`SessionManager`; selected rules are passed to Ask Agent only for the
|
|
11
|
+
matching verified workspace context. Rule persistence remains host-owned.
|
|
5
12
|
## [0.6.0] - 2026-09-23
|
|
6
13
|
## [0.5.0] - 2026-09-23
|
|
7
14
|
|
|
@@ -68,7 +68,7 @@ module Ask
|
|
|
68
68
|
# Ask::Agent::Session.new (hooks, plan_mode, todos, ...)
|
|
69
69
|
def initialize(model:, tools: nil, system_prompt: nil, agent_dir: nil,
|
|
70
70
|
approval: :off, require_approval: nil, host: nil,
|
|
71
|
-
state_adapter: nil, created_at: nil, project_grants: nil, **session_opts)
|
|
71
|
+
state_adapter: nil, created_at: nil, project_grants: nil, project_rules: nil, **session_opts)
|
|
72
72
|
@model = model
|
|
73
73
|
@system_prompt = system_prompt
|
|
74
74
|
@tools = resolve_tools(tools)
|
|
@@ -77,6 +77,7 @@ module Ask
|
|
|
77
77
|
@require_approval = require_approval
|
|
78
78
|
@agent_dir = agent_dir
|
|
79
79
|
@project_grants = project_grants
|
|
80
|
+
@project_rules = project_rules
|
|
80
81
|
@host = host || build_durable_host(state_adapter)
|
|
81
82
|
@durable_record = false
|
|
82
83
|
# The session's workspace is the tools' home: bash commands
|
|
@@ -488,6 +489,7 @@ module Ask
|
|
|
488
489
|
)
|
|
489
490
|
opts = { queue: queue }
|
|
490
491
|
opts[:project_grants] = @project_grants if @project_grants
|
|
492
|
+
opts[:project_rules] = @project_rules if @project_rules
|
|
491
493
|
return opts if @approval == :auto
|
|
492
494
|
|
|
493
495
|
opts.merge(require_approval: @require_approval)
|
|
@@ -32,7 +32,7 @@ module Ask
|
|
|
32
32
|
attr_reader :blocked_tools
|
|
33
33
|
attr_reader :permission_timeout
|
|
34
34
|
|
|
35
|
-
def initialize(store: nil, host: nil, state_adapter: nil, permission_mode: :on_request, blocked_tools: nil, permission_timeout: 300)
|
|
35
|
+
def initialize(store: nil, host: nil, state_adapter: nil, permission_mode: :on_request, blocked_tools: nil, permission_timeout: 300, project_rules: nil)
|
|
36
36
|
@state_adapter = state_adapter
|
|
37
37
|
@project_grant_state = state_adapter || Ask::State::Memory.new
|
|
38
38
|
@store = store || SessionStore.new(state: state_adapter)
|
|
@@ -42,6 +42,7 @@ module Ask
|
|
|
42
42
|
@permission_mode = permission_mode
|
|
43
43
|
@blocked_tools = (blocked_tools || DEFAULT_REQUIRE_APPROVAL).map(&:to_s)
|
|
44
44
|
@permission_timeout = permission_timeout
|
|
45
|
+
@project_rules_provider = project_rules
|
|
45
46
|
@session_event_observers = []
|
|
46
47
|
@logger = Logger.new($stdout, level: ENV["DEBUG"] ? Logger::DEBUG || Logger::DEBUG : Logger::WARN)
|
|
47
48
|
end
|
|
@@ -92,6 +93,7 @@ module Ask
|
|
|
92
93
|
approval: approval_opts[:mode],
|
|
93
94
|
require_approval: approval_opts[:require_approval],
|
|
94
95
|
project_grants: project_grants_for(workspace_id),
|
|
96
|
+
project_rules: project_rules_for(canonical_workspace_path(workspace_path), workspace_id),
|
|
95
97
|
plan_mode: plan_mode,
|
|
96
98
|
host: @host
|
|
97
99
|
)
|
|
@@ -162,6 +164,7 @@ module Ask
|
|
|
162
164
|
approval: approval_opts[:mode],
|
|
163
165
|
require_approval: approval_opts[:require_approval],
|
|
164
166
|
project_grants: project_grants,
|
|
167
|
+
project_rules: project_rules_for(workspace_path, workspace_id),
|
|
165
168
|
plan_mode: plan_mode,
|
|
166
169
|
host: @host,
|
|
167
170
|
created_at: record.created_at
|
|
@@ -185,6 +188,24 @@ module Ask
|
|
|
185
188
|
end
|
|
186
189
|
end
|
|
187
190
|
|
|
191
|
+
# Project rule storage and policy selection belong to the host. Supply
|
|
192
|
+
# either a PermissionRules instance or a callable receiving the
|
|
193
|
+
# verified workspace path and opaque workspace identity.
|
|
194
|
+
def project_rules_for(workspace_path, workspace_id)
|
|
195
|
+
provider = @project_rules_provider
|
|
196
|
+
return nil unless provider
|
|
197
|
+
|
|
198
|
+
rules = if provider.respond_to?(:call)
|
|
199
|
+
provider.call(workspace_path: workspace_path, workspace_id: workspace_id)
|
|
200
|
+
else
|
|
201
|
+
provider
|
|
202
|
+
end
|
|
203
|
+
return nil if rules.nil?
|
|
204
|
+
return rules if rules.respond_to?(:classify)
|
|
205
|
+
|
|
206
|
+
raise ArgumentError, 'project_rules provider must return an object responding to :classify'
|
|
207
|
+
end
|
|
208
|
+
|
|
188
209
|
def workspace_identity(path)
|
|
189
210
|
canonical = canonical_workspace_path(path)
|
|
190
211
|
canonical && "workspace:#{Digest::SHA256.hexdigest(canonical)}"
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ask-app-server
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.7.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kaka Ruto
|
|
@@ -113,14 +113,14 @@ dependencies:
|
|
|
113
113
|
requirements:
|
|
114
114
|
- - ">="
|
|
115
115
|
- !ruby/object:Gem::Version
|
|
116
|
-
version: 0.
|
|
116
|
+
version: 0.3.0
|
|
117
117
|
type: :runtime
|
|
118
118
|
prerelease: false
|
|
119
119
|
version_requirements: !ruby/object:Gem::Requirement
|
|
120
120
|
requirements:
|
|
121
121
|
- - ">="
|
|
122
122
|
- !ruby/object:Gem::Version
|
|
123
|
-
version: 0.
|
|
123
|
+
version: 0.3.0
|
|
124
124
|
- !ruby/object:Gem::Dependency
|
|
125
125
|
name: minitest
|
|
126
126
|
requirement: !ruby/object:Gem::Requirement
|