ace-hitl-contract 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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +9 -0
- data/README.md +14 -0
- data/Rakefile +12 -0
- data/lib/ace/hitl/contract/errors.rb +24 -0
- data/lib/ace/hitl/contract/ref.rb +62 -0
- data/lib/ace/hitl/contract/results.rb +14 -0
- data/lib/ace/hitl/contract/version.rb +9 -0
- data/lib/ace/hitl/contract.rb +6 -0
- metadata +94 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 898a6d72e810e38ec458ab4c6fed1ef44f7153fb4caa4385ccbfc90dcf32c6de
|
|
4
|
+
data.tar.gz: b31aebd8f351ae2bd240eee1a11a18532065bebfda87b005deefc66d49c59067
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 77410b2ccb1fd4477c953a081165427e6ab587540df113cb2806314131c0e3577e17b7f32931c5983230c6021cd7b494169aea4ff93d3bf7fa52e7ec7af11379
|
|
7
|
+
data.tar.gz: ddb96c185b8e5c4a1ab74e0a5328131773f9dd2369deeecf0041bd6373ba884e177062c465a807143ad8594fd7c093006c3fdfa2386ba082038daf3f153e656f
|
data/CHANGELOG.md
ADDED
data/README.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# ace-hitl-contract
|
|
2
|
+
|
|
3
|
+
Shared provider protocol for ACE HITL request orchestration and delivery adapters. It has no runtime gem dependencies and performs no service, assignment or transport initialization.
|
|
4
|
+
|
|
5
|
+
```ruby
|
|
6
|
+
require "ace/hitl/contract"
|
|
7
|
+
|
|
8
|
+
ref = Ace::Hitl::Providers::Ref.from_env
|
|
9
|
+
result = Ace::Hitl::Providers::DeliverResult.new(ref: ref, state: :delivered)
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
The protocol owns `Ref`, `AskResult`, `DeliverResult` and the provider error hierarchy under `Ace::Hitl::Providers`. Full registry and locked assignment authority remain in `ace-hitl`. Runtime adapters use this leaf package without loading the privileged HITL lifecycle.
|
|
13
|
+
|
|
14
|
+
Run package tests from the ACE checkout with `bin/ace-test ace-hitl-contract all`.
|
data/Rakefile
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Ace
|
|
4
|
+
module Hitl
|
|
5
|
+
module Providers
|
|
6
|
+
# Error model for HITL provider adapters (spec 8wm.t.vrz §2).
|
|
7
|
+
class Error < StandardError; end
|
|
8
|
+
|
|
9
|
+
# The provider name is not in the registry.
|
|
10
|
+
class UnknownProviderError < Error; end
|
|
11
|
+
|
|
12
|
+
# The reverse address (herdr session + pane) is absent or invalid.
|
|
13
|
+
# Ask fails closed before any event or transport state is created.
|
|
14
|
+
class InvalidRefError < Error; end
|
|
15
|
+
|
|
16
|
+
# The transport send failed (binary missing, non-zero exit,
|
|
17
|
+
# unparseable output) after the local event may already exist.
|
|
18
|
+
class ProviderUnavailableError < Error; end
|
|
19
|
+
|
|
20
|
+
# The provider does not implement the requested operation.
|
|
21
|
+
class UnsupportedOperationError < Error; end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "errors"
|
|
4
|
+
|
|
5
|
+
module Ace
|
|
6
|
+
module Hitl
|
|
7
|
+
module Providers
|
|
8
|
+
# Typed reverse address of the asking agent: herdr session + pane
|
|
9
|
+
# (spec 8wm.t.vrz §3). Versioned schema ace.hitl.ref/v1; captured
|
|
10
|
+
# fail-closed from the herdr environment at ask time. ace-herdr
|
|
11
|
+
# exports both variables when it bootstraps an agent pane.
|
|
12
|
+
#
|
|
13
|
+
# The ref identifies WHERE the answer goes; it never carries answer
|
|
14
|
+
# content.
|
|
15
|
+
class Ref
|
|
16
|
+
SCHEMA = "ace.hitl.ref/v1"
|
|
17
|
+
SESSION_ENV = "HERDR_SESSION"
|
|
18
|
+
PANE_ENV = "HERDR_PANE"
|
|
19
|
+
MAX_LENGTH = 128
|
|
20
|
+
TOKEN_PATTERN = /\A[A-Za-z0-9._:-]+\z/.freeze
|
|
21
|
+
|
|
22
|
+
attr_reader :session, :pane
|
|
23
|
+
|
|
24
|
+
def initialize(session:, pane:)
|
|
25
|
+
@session = session
|
|
26
|
+
@pane = pane
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Fail closed: raises InvalidRefError naming the offending variable
|
|
30
|
+
# and rule when the reverse address is absent or invalid.
|
|
31
|
+
def self.from_env(env = ENV)
|
|
32
|
+
session = validate!(env[SESSION_ENV], SESSION_ENV)
|
|
33
|
+
pane = validate!(env[PANE_ENV], PANE_ENV)
|
|
34
|
+
new(session: session, pane: pane)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def self.validate!(value, source)
|
|
38
|
+
token = value.to_s.strip
|
|
39
|
+
if token.empty?
|
|
40
|
+
raise InvalidRefError,
|
|
41
|
+
"#{source} is required (herdr reverse address, #{SCHEMA})"
|
|
42
|
+
end
|
|
43
|
+
if token.length > MAX_LENGTH
|
|
44
|
+
raise InvalidRefError,
|
|
45
|
+
"#{source} exceeds #{MAX_LENGTH} characters"
|
|
46
|
+
end
|
|
47
|
+
unless token.match?(TOKEN_PATTERN)
|
|
48
|
+
raise InvalidRefError,
|
|
49
|
+
"#{source} contains invalid characters " \
|
|
50
|
+
"(allowed: letters, digits, '.', '_', ':', '-')"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
token
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def to_h
|
|
57
|
+
{schema: SCHEMA, session: session, pane: pane}
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Ace
|
|
4
|
+
module Hitl
|
|
5
|
+
module Providers
|
|
6
|
+
# ask(question:, ...) result: local event id + relay request id.
|
|
7
|
+
AskResult = Struct.new(:event_id, :request_id, keyword_init: true)
|
|
8
|
+
|
|
9
|
+
# deliver(ref, answer) result; state is :delivered, :retryable
|
|
10
|
+
# (safe to re-push identical content) or :failed.
|
|
11
|
+
DeliverResult = Struct.new(:ref, :state, keyword_init: true)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: ace-hitl-contract
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Michal Czyz
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: ace-support-test-helpers
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - "~>"
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '0.14'
|
|
19
|
+
type: :development
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - "~>"
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '0.14'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: minitest
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - "~>"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '5.0'
|
|
33
|
+
type: :development
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '5.0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: rake
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '13.0'
|
|
47
|
+
type: :development
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '13.0'
|
|
54
|
+
description: Pure HITL provider vocabulary shared by request orchestration and delivery
|
|
55
|
+
adapters, without activating assignment or privileged HITL service dependencies.
|
|
56
|
+
email:
|
|
57
|
+
- mc@cs3b.com
|
|
58
|
+
executables: []
|
|
59
|
+
extensions: []
|
|
60
|
+
extra_rdoc_files: []
|
|
61
|
+
files:
|
|
62
|
+
- CHANGELOG.md
|
|
63
|
+
- README.md
|
|
64
|
+
- Rakefile
|
|
65
|
+
- lib/ace/hitl/contract.rb
|
|
66
|
+
- lib/ace/hitl/contract/errors.rb
|
|
67
|
+
- lib/ace/hitl/contract/ref.rb
|
|
68
|
+
- lib/ace/hitl/contract/results.rb
|
|
69
|
+
- lib/ace/hitl/contract/version.rb
|
|
70
|
+
homepage: https://github.com/cs3b/ace
|
|
71
|
+
licenses:
|
|
72
|
+
- MIT
|
|
73
|
+
metadata:
|
|
74
|
+
allowed_push_host: https://rubygems.org
|
|
75
|
+
source_code_uri: https://github.com/cs3b/ace/tree/main/ace-hitl-contract/
|
|
76
|
+
changelog_uri: https://github.com/cs3b/ace/blob/main/ace-hitl-contract/CHANGELOG.md
|
|
77
|
+
rdoc_options: []
|
|
78
|
+
require_paths:
|
|
79
|
+
- lib
|
|
80
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
81
|
+
requirements:
|
|
82
|
+
- - ">="
|
|
83
|
+
- !ruby/object:Gem::Version
|
|
84
|
+
version: 3.2.0
|
|
85
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - ">="
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0'
|
|
90
|
+
requirements: []
|
|
91
|
+
rubygems_version: 3.6.9
|
|
92
|
+
specification_version: 4
|
|
93
|
+
summary: Shared HITL provider reference, result and error protocol
|
|
94
|
+
test_files: []
|