ace-herdr 0.4.0 → 0.5.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.
- checksums.yaml +4 -4
- data/.ace-defaults/herdr/config.yml +0 -4
- data/CHANGELOG.md +18 -0
- data/docs/usage.md +57 -35
- data/lib/ace/herdr/cli/commands/inbox.rb +83 -21
- data/lib/ace/herdr/cli/commands/native_source.rb +56 -0
- data/lib/ace/herdr/cli.rb +3 -0
- data/lib/ace/herdr/errors.rb +23 -0
- data/lib/ace/herdr/molecules/bounded_process.rb +261 -52
- data/lib/ace/herdr/molecules/delivery_record_store.rb +81 -6
- data/lib/ace/herdr/molecules/guarded_native_origin.rb +59 -0
- data/lib/ace/herdr/molecules/herdr_executor.rb +6 -3
- data/lib/ace/herdr/molecules/inbox_cli_input.rb +36 -0
- data/lib/ace/herdr/molecules/inbox_context_client.rb +88 -0
- data/lib/ace/herdr/molecules/inbox_context_completion_client.rb +119 -0
- data/lib/ace/herdr/molecules/inbox_context_key.rb +63 -0
- data/lib/ace/herdr/molecules/inbox_context_lifetime.rb +122 -0
- data/lib/ace/herdr/molecules/inbox_context_native_process.rb +92 -0
- data/lib/ace/herdr/molecules/inbox_context_service_configuration.rb +183 -0
- data/lib/ace/herdr/molecules/inbox_context_store.rb +159 -0
- data/lib/ace/herdr/molecules/inbox_context_wire.rb +76 -0
- data/lib/ace/herdr/molecules/inbox_direct_effect_binding.rb +92 -0
- data/lib/ace/herdr/molecules/inbox_direct_result.rb +65 -0
- data/lib/ace/herdr/molecules/native_queue_executor.rb +10 -21
- data/lib/ace/herdr/molecules/native_source.rb +189 -0
- data/lib/ace/herdr/molecules/protected_inbox_selection.rb +126 -0
- data/lib/ace/herdr/molecules/protected_native_control.rb +129 -4
- data/lib/ace/herdr/native_source/HERDR-LICENSE +201 -0
- data/lib/ace/herdr/native_source/guarded-prompt.patch +3493 -0
- data/lib/ace/herdr/native_source/selection.json +24 -0
- data/lib/ace/herdr/organisms/inbox.rb +293 -203
- data/lib/ace/herdr/organisms/inbox_context_direct_effects.rb +285 -0
- data/lib/ace/herdr/organisms/inbox_context_effects.rb +30 -0
- data/lib/ace/herdr/organisms/inbox_context_listener.rb +151 -0
- data/lib/ace/herdr/organisms/inbox_context_owner.rb +550 -0
- data/lib/ace/herdr/organisms/inbox_context_server.rb +70 -0
- data/lib/ace/herdr/organisms/inbox_context_service.rb +107 -0
- data/lib/ace/herdr/organisms/inbox_guarded_wake.rb +117 -0
- data/lib/ace/herdr/organisms/native_source_builder.rb +183 -0
- data/lib/ace/herdr/version.rb +1 -1
- data/lib/ace/herdr.rb +5 -28
- metadata +68 -9
- data/lib/ace/herdr/organisms/protected_inbox.rb +0 -73
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative "inbox"
|
|
4
|
-
require_relative "../molecules/protected_native_control"
|
|
5
|
-
require_relative "../molecules/herdr_executor"
|
|
6
|
-
require_relative "../molecules/native_queue_executor"
|
|
7
|
-
require_relative "../molecules/bounded_process"
|
|
8
|
-
|
|
9
|
-
module Ace
|
|
10
|
-
module Herdr
|
|
11
|
-
module Organisms
|
|
12
|
-
# Fixed construction for the canonical authority consumer. Callers of the
|
|
13
|
-
# public protocol cannot inject this factory or its collaborators.
|
|
14
|
-
module ProtectedInbox
|
|
15
|
-
class PaneReader
|
|
16
|
-
def initialize(control)
|
|
17
|
-
@control = control
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def pane_get_bounded(pane)
|
|
21
|
-
result = @control.request("pane.get", {"pane_id" => pane})
|
|
22
|
-
Molecules::ExecutionResult.new(stdout: JSON.generate({"result" => result}), stderr: "",
|
|
23
|
-
success: true, exit_code: 0)
|
|
24
|
-
rescue Ace::Runtime::RuntimeUnavailableError
|
|
25
|
-
raise ExecutorUnavailableError, "original protected native endpoint is unavailable"
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
class PiIdentity
|
|
30
|
-
def initialize(client)
|
|
31
|
-
runner = lambda do |argv, stdin_data:, timeout_s:|
|
|
32
|
-
unless argv == [client, "--identity"] && stdin_data.empty?
|
|
33
|
-
raise ExecutorUnavailableError, "protected inbox permits identity inspection only"
|
|
34
|
-
end
|
|
35
|
-
result = Molecules::BoundedProcess.call(argv, stdin_data: stdin_data,
|
|
36
|
-
timeout_s: timeout_s, environment: {})
|
|
37
|
-
raise ExecutorError, "Pi identity output is oversized" if result.oversized
|
|
38
|
-
[result.stdout, result.stderr, result.status]
|
|
39
|
-
end
|
|
40
|
-
@native = Molecules::NativeQueueExecutor.new(pi_client: client, runner: runner)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def pi_identity
|
|
44
|
-
@native.pi_identity
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
module_function
|
|
49
|
-
|
|
50
|
-
# The Assign resolver has verified context paths/key/client. native is
|
|
51
|
-
# the immutable canonical stage, not current process discovery. Endpoint
|
|
52
|
-
# liveness is checked lazily only if Inbox actually observes replacement.
|
|
53
|
-
def build(context:, mapping:, native:, kernel: Ace::Runtime::Molecules::ProtectedLinux.new)
|
|
54
|
-
native_fields = %w[server_identity socket_identity workspace_id]
|
|
55
|
-
unless native.is_a?(Hash) && native_fields.all? { |key| native.key?(key) }
|
|
56
|
-
raise ValidationError, "canonical native stage is unavailable"
|
|
57
|
-
end
|
|
58
|
-
fixed = JSON.parse(JSON.generate(mapping))
|
|
59
|
-
fixed["native"].merge!(native.slice(*native_fields))
|
|
60
|
-
control = Molecules::ProtectedNativeControl.new(mapping: fixed, kernel: kernel)
|
|
61
|
-
key = OpenSSL::PKey.read(File.binread(context.fetch("receipt_public_key")))
|
|
62
|
-
unless key.is_a?(OpenSSL::PKey::RSA) && !key.private?
|
|
63
|
-
raise ValidationError, "protected inbox requires a public RSA key"
|
|
64
|
-
end
|
|
65
|
-
Inbox.new(executor: PaneReader.new(control), native: PiIdentity.new(context.fetch("pi_queue_client")),
|
|
66
|
-
deliveries_dir: context.fetch("deliveries_dir"), receipt_public_key: key)
|
|
67
|
-
rescue KeyError, SystemCallError, OpenSSL::PKey::PKeyError
|
|
68
|
-
raise ValidationError, "protected inbox fixed context is unavailable"
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|