ask-ruby-harness 0.3.5 → 0.3.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c2b9ce3fad73f49c6db6c849f9799fd7912f773374e5a4c261ef4aac92c87009
4
- data.tar.gz: 7dc3ed1dd982bd40d93a5ce902ca6cf4dbc38e9f65e1e00c9665682b5bee671c
3
+ metadata.gz: b8aed042cba86d2de8535475395a3135ae00d00f76ec0165e3a6eec6421191f9
4
+ data.tar.gz: f470f53caf43c81b322b90d6956429b81b3fecb3a36bf44a2e5c88e29a22d4f2
5
5
  SHA512:
6
- metadata.gz: 23eda08cd662cc27f97bf8e069dd1f9773a75c1274741ab7e17000d71001dc63bc915a0d0164dd5ec87f11173085983ce5fc25c48def1e9b485ea29c10aa08f1
7
- data.tar.gz: 6186b5481dd7afc77e8563864098cd9cd615a4f0e6ea75dd8c6f70bc98ac5d3e5d3d6446ff56d7c11f36c7713cfea88c4358861cc2aaff8d7d08479a15ee37ed
6
+ metadata.gz: fa1cd1722d3ca0f038cf9b4826658d81947277ef13fdd5fd4e31f40a7eb3db43943a072d882e6e6c714837f057135b79cc8a28137d293207bd8763602e2b2930
7
+ data.tar.gz: aac8c7e02b2cbda67a88fde376d753f23d792213fb80f9741a236783d0d88e15595c3ef37140b1a080120d203f92b1d0270280510dd85194313fd9825dd8053a
data/README.md CHANGED
@@ -14,6 +14,7 @@ access for coding agents. The language edition of the ask-rb harness family
14
14
  | `RunCommand` | Run shell commands in the project root, gated by permission rules |
15
15
  | `SchemaGraph` | Full schema introspection: models, tables, columns, associations |
16
16
  | `RunTests` | Structured test results with failure reruns (rails test / rspec / rake test) |
17
+ | `DevUrl` | ask-local dev URLs: list active routes, resolve a service name to its stable .localhost URL |
17
18
 
18
19
  Generic file and search capabilities (read, grep, edit) are provided by the
19
20
  agent's native tools; the harness focuses on what only an app-aware layer
@@ -0,0 +1,94 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ask
4
+ module Ruby
5
+ module Harness
6
+ module Tools
7
+ # Structured access to ask-local's stable dev URLs: active routes,
8
+ # plus name -> URL resolution that inherits the current directory's
9
+ # variant context. Replaces scraping ports out of logs.
10
+ #
11
+ # ask-local is an optional dependency: the tool degrades to a clear
12
+ # failure result when the gem is absent so harness hosts without it
13
+ # lose nothing.
14
+ class DevUrl < Ask::Ruby::Harness::Tool
15
+ description "List ask-local dev-server routes and resolve stable " \
16
+ ".localhost URLs. Use instead of guessing ports: " \
17
+ "'list' shows every active route with its URL and " \
18
+ "backend; 'get' resolves a service name to its URL " \
19
+ "(inheriting the current worktree/variant context)."
20
+
21
+ param :action, type: :string, desc: "list (default) or get", required: false
22
+ param :name, type: :string, desc: "Service name for get (e.g. backend)", required: false
23
+
24
+ def execute(action: "list", name: nil)
25
+ unless defined?(Ask::Local)
26
+ begin
27
+ require "ask-local"
28
+ rescue LoadError
29
+ return Ask::Result.failure(
30
+ "ask-local is not installed. Add `gem \"ask-local\"` to the Gemfile " \
31
+ "for stable .localhost dev URLs."
32
+ )
33
+ end
34
+ end
35
+
36
+ case action
37
+ when "get" then get(name)
38
+ when "list" then list
39
+ else Ask::Result.failure("Unknown action #{action.inspect}. Use 'list' or 'get'.")
40
+ end
41
+ end
42
+
43
+ private
44
+
45
+ def list
46
+ store = Ask::Local::RouteStore.new(Ask::Local::Certs.state_dir)
47
+ routes = store.load_routes
48
+ port = Ask::Local::ProxyControl.proxy_port(store)
49
+ tls = Ask::Local::ProxyControl.proxy_tls(store)
50
+ entries = routes.map do |route|
51
+ {
52
+ hostname: route["hostname"],
53
+ url: Ask::Local::Hostname.url(route["hostname"], port: port, tls: tls),
54
+ target: route["target"],
55
+ kind: route["kind"],
56
+ supervised: !route["spec"].nil?,
57
+ pid: route["pid"]
58
+ }
59
+ end
60
+ { routes: entries, proxy_port: port, count: entries.length }
61
+ rescue Ask::Local::Error => e
62
+ Ask::Result.failure(e.message)
63
+ end
64
+
65
+ def get(name)
66
+ return Ask::Result.failure("Name is required for action 'get'.") if name.nil? || name.to_s.strip.empty?
67
+
68
+ resolved = Ask::Local::Resolver.resolve(
69
+ app_root.to_s, use_branch: false
70
+ )
71
+ hostnames = Ask::Local::Hostname.build(
72
+ app: Ask::Local::Sanitize.hostname_label(name),
73
+ variant: resolved.variant,
74
+ tlds: resolved.tlds
75
+ )
76
+ store = Ask::Local::RouteStore.new(Ask::Local::Certs.state_dir)
77
+ port = Ask::Local::ProxyControl.proxy_port(store)
78
+ tls = Ask::Local::ProxyControl.proxy_tls(store)
79
+ url = Ask::Local::Hostname.url(hostnames.first, port: port, tls: tls)
80
+ {
81
+ name: name,
82
+ url: url,
83
+ variant: resolved.variant,
84
+ tlds: resolved.tlds,
85
+ registered: !store.find(hostnames.first).nil?
86
+ }
87
+ rescue Ask::Local::Error => e
88
+ Ask::Result.failure(e.message)
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -3,7 +3,7 @@
3
3
  module Ask
4
4
  module Ruby
5
5
  module Harness
6
- VERSION = "0.3.5"
6
+ VERSION = "0.3.7"
7
7
  end
8
8
  end
9
9
  end
@@ -274,10 +274,12 @@ require_relative "harness/tools/read_model"
274
274
  require_relative "harness/tools/read_log"
275
275
  require_relative "harness/tools/schema_graph"
276
276
  require_relative "harness/tools/run_tests"
277
+ require_relative "harness/tools/dev_url"
277
278
 
278
279
  # Define after all tool files are loaded so the constants resolve
279
280
  Ask::Ruby::Harness::HARNESS_TOOLS = [
280
281
  Ask::Ruby::Harness::Tools::RunCommand, Ask::Ruby::Harness::Tools::QueryDatabase,
281
282
  Ask::Ruby::Harness::Tools::ReadModel, Ask::Ruby::Harness::Tools::ReadLog,
282
- Ask::Ruby::Harness::Tools::SchemaGraph, Ask::Ruby::Harness::Tools::RunTests
283
+ Ask::Ruby::Harness::Tools::SchemaGraph, Ask::Ruby::Harness::Tools::RunTests,
284
+ Ask::Ruby::Harness::Tools::DevUrl
283
285
  ].freeze
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "ask/ruby/harness"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ask-ruby-harness
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.3.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kaka Ruto
@@ -43,28 +43,28 @@ dependencies:
43
43
  requirements:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: '0.1'
46
+ version: 0.6.1
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: '0.1'
53
+ version: 0.6.1
54
54
  - !ruby/object:Gem::Dependency
55
55
  name: ask-agent
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
- version: 0.40.1
60
+ version: 0.40.10
61
61
  type: :runtime
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - ">="
66
66
  - !ruby/object:Gem::Version
67
- version: 0.40.1
67
+ version: 0.40.10
68
68
  - !ruby/object:Gem::Dependency
69
69
  name: sqlite3
70
70
  requirement: !ruby/object:Gem::Requirement
@@ -135,12 +135,14 @@ files:
135
135
  - CHANGELOG.md
136
136
  - LICENSE
137
137
  - README.md
138
+ - lib/ask-ruby-harness.rb
138
139
  - lib/ask/ruby/harness.rb
139
140
  - lib/ask/ruby/harness/audit_log.rb
140
141
  - lib/ask/ruby/harness/configuration.rb
141
142
  - lib/ask/ruby/harness/environment_permissions.rb
142
143
  - lib/ask/ruby/harness/minitest_json_reporter.rb
143
144
  - lib/ask/ruby/harness/tool.rb
145
+ - lib/ask/ruby/harness/tools/dev_url.rb
144
146
  - lib/ask/ruby/harness/tools/query_database.rb
145
147
  - lib/ask/ruby/harness/tools/read_log.rb
146
148
  - lib/ask/ruby/harness/tools/read_model.rb