space-architect 1.3.0 → 2.0.0.rc1
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 +103 -0
- data/README.md +248 -155
- data/exe/architect +1 -1
- data/exe/space +2 -2
- data/exe/src +13 -0
- data/lib/space_architect/architect_mission.rb +84 -53
- data/lib/space_architect/cli/architect.rb +92 -132
- data/lib/space_architect/cli/research.rb +94 -0
- data/lib/space_architect/cli/space.rb +25 -31
- data/lib/space_architect/cli/src.rb +20 -14
- data/lib/space_architect/cli.rb +22 -22
- data/lib/space_architect/dispatcher.rb +5 -1
- data/lib/space_architect/harness.rb +123 -16
- data/lib/space_architect/research/mux.rb +127 -0
- data/lib/space_architect/research/registry.rb +70 -0
- data/lib/space_architect/research/renderer.rb +101 -0
- data/lib/space_architect/research/run.rb +7 -0
- data/lib/space_architect/research/supervisor.rb +108 -0
- data/lib/space_architect/research.rb +13 -0
- data/lib/space_architect/run_creator.rb +53 -0
- data/lib/space_architect/skill_installer.rb +81 -79
- data/lib/space_architect.rb +5 -20
- data/lib/{space_architect → space_core}/atomic_write.rb +1 -1
- data/lib/space_core/cli/base_command.rb +19 -0
- data/lib/space_core/cli/config.rb +49 -0
- data/lib/space_core/cli/current.rb +16 -0
- data/lib/space_core/cli/help.rb +110 -0
- data/lib/space_core/cli/helpers.rb +115 -0
- data/lib/space_core/cli/init.rb +29 -0
- data/lib/space_core/cli/list.rb +24 -0
- data/lib/space_core/cli/new.rb +38 -0
- data/lib/space_core/cli/path.rb +16 -0
- data/lib/space_core/cli/repeatable_options.rb +75 -0
- data/lib/space_core/cli/repo.rb +76 -0
- data/lib/space_core/cli/shell.rb +125 -0
- data/lib/space_core/cli/show.rb +21 -0
- data/lib/space_core/cli/status.rb +33 -0
- data/lib/space_core/cli/use.rb +17 -0
- data/lib/space_core/cli.rb +171 -0
- data/lib/{space_architect → space_core}/config.rb +1 -1
- data/lib/{space_architect → space_core}/errors.rb +1 -1
- data/lib/{space_architect → space_core}/git_client.rb +1 -1
- data/lib/{space_architect → space_core}/mise_client.rb +1 -1
- data/lib/{space_architect → space_core}/repo_reference.rb +1 -1
- data/lib/{space_architect → space_core}/repo_resolver.rb +1 -1
- data/lib/{space_architect → space_core}/shell_integration.rb +1 -1
- data/lib/{space_architect → space_core}/slugger.rb +1 -1
- data/lib/{space_architect → space_core}/space.rb +1 -1
- data/lib/{space_architect → space_core}/space_store.rb +12 -12
- data/lib/{space_architect → space_core}/state.rb +1 -1
- data/lib/{space_architect → space_core}/terminal.rb +1 -1
- data/lib/space_core/version.rb +7 -0
- data/lib/{space_architect → space_core}/warnings.rb +1 -1
- data/lib/{space_architect → space_core}/xdg.rb +1 -1
- data/lib/space_core.rb +24 -0
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/cli/clone.rb +5 -5
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/cli/config.rb +7 -7
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/cli/daemon.rb +46 -30
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/cli/options.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/cli/org.rb +9 -9
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/cli/repo.rb +9 -9
- data/lib/space_src/cli/shell.rb +122 -0
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/cli/status.rb +7 -7
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/cli/sync.rb +17 -17
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/cli.rb +42 -11
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/cloner.rb +3 -3
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/config/contract.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/config/duration.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/config/model.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/config/store.rb +5 -5
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/forge/client.rb +2 -2
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/forge/github.rb +4 -4
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/launchd/agent.rb +5 -5
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/launchd/plist.rb +3 -3
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/log_rotator.rb +1 -1
- data/lib/space_src/migration.rb +43 -0
- data/lib/space_src/nav.rb +98 -0
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/paths.rb +2 -2
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/scm/client.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/scm/git.rb +4 -4
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/scm/status.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/shell.rb +1 -1
- data/lib/space_src/shell_integration.rb +321 -0
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/state/lock.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/state/store.rb +2 -2
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/sync/engine.rb +12 -12
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/sync/repo_plan.rb +3 -3
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/ui/interactive_reporter.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/ui/json_reporter.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/ui/mode.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/ui/plain_reporter.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/ui/reporter.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/version.rb +2 -2
- data/lib/space_src.rb +37 -0
- data/skill/architect/SKILL.md +2 -2
- data/skill/architect/research.md +46 -37
- metadata +115 -67
- data/lib/space_architect/cli/config.rb +0 -61
- data/lib/space_architect/cli/current.rb +0 -22
- data/lib/space_architect/cli/helpers.rb +0 -117
- data/lib/space_architect/cli/init.rb +0 -35
- data/lib/space_architect/cli/list.rb +0 -30
- data/lib/space_architect/cli/new.rb +0 -43
- data/lib/space_architect/cli/options.rb +0 -12
- data/lib/space_architect/cli/path.rb +0 -22
- data/lib/space_architect/cli/repo.rb +0 -88
- data/lib/space_architect/cli/shell.rb +0 -137
- data/lib/space_architect/cli/show.rb +0 -27
- data/lib/space_architect/cli/status.rb +0 -39
- data/lib/space_architect/cli/use.rb +0 -23
- data/lib/space_architect/version.rb +0 -5
- data/vendor/repo-tender/lib/space_architect/pristine.rb +0 -44
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module SpaceArchitect
|
|
4
|
-
module CLI
|
|
5
|
-
module Shell
|
|
6
|
-
class ShellInit < Dry::CLI::Command
|
|
7
|
-
include GlobalOptions
|
|
8
|
-
include Helpers
|
|
9
|
-
|
|
10
|
-
desc "Print shell integration script"
|
|
11
|
-
argument :shell_name, required: true, desc: "Shell name (e.g. fish)"
|
|
12
|
-
|
|
13
|
-
def call(shell_name:, **opts)
|
|
14
|
-
setup_terminal(**opts.slice(:color, :colors))
|
|
15
|
-
handle_errors do
|
|
16
|
-
terminal.say ShellIntegration.for(shell_name)
|
|
17
|
-
CLI.record_outcome(Outcome.new(exit_code: 0))
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
class Fish < Dry::CLI::Command
|
|
23
|
-
include GlobalOptions
|
|
24
|
-
include Helpers
|
|
25
|
-
|
|
26
|
-
desc "Manage fish shell integration: install, uninstall, path"
|
|
27
|
-
argument :subcommand, required: false, desc: "install, uninstall, or path (default: install)"
|
|
28
|
-
option :force, type: :boolean, default: false, desc: "Overwrite or remove existing shell files"
|
|
29
|
-
|
|
30
|
-
def call(subcommand: "install", force: false, **opts)
|
|
31
|
-
setup_terminal(**opts.slice(:color, :colors))
|
|
32
|
-
handle_errors do
|
|
33
|
-
case subcommand
|
|
34
|
-
when "install"
|
|
35
|
-
result = ShellIntegration.install("fish", env: project_config.env, force: force)
|
|
36
|
-
terminal.success fish_install_message(result.fetch(:action), result.fetch(:path))
|
|
37
|
-
terminal.success fish_completions_install_message(result.fetch(:completions_action), result.fetch(:completions_path))
|
|
38
|
-
terminal.say "Restart fish to load the integration in this terminal: exec fish"
|
|
39
|
-
when "uninstall"
|
|
40
|
-
result = ShellIntegration.uninstall("fish", env: project_config.env, force: force)
|
|
41
|
-
terminal.success fish_uninstall_message(result.fetch(:action), result.fetch(:path))
|
|
42
|
-
terminal.success fish_completions_uninstall_message(result.fetch(:completions_action), result.fetch(:completions_path))
|
|
43
|
-
when "path"
|
|
44
|
-
terminal.say "Function: #{terminal.path(ShellIntegration.path_for('fish', env: project_config.env))}"
|
|
45
|
-
terminal.say "Completions: #{terminal.path(ShellIntegration.completions_path_for('fish', env: project_config.env))}"
|
|
46
|
-
else
|
|
47
|
-
err.puts "Usage: space shell fish [install|uninstall|path]"
|
|
48
|
-
CLI.record_outcome(Outcome.new(exit_code: 1))
|
|
49
|
-
next
|
|
50
|
-
end
|
|
51
|
-
CLI.record_outcome(Outcome.new(exit_code: 0))
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
private
|
|
56
|
-
|
|
57
|
-
def fish_install_message(action, path)
|
|
58
|
-
case action
|
|
59
|
-
when :unchanged then "Fish integration already installed: #{terminal.path(path)}"
|
|
60
|
-
when :updated then "Updated fish integration: #{terminal.path(path)}"
|
|
61
|
-
else "Installed fish integration: #{terminal.path(path)}"
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def fish_uninstall_message(action, path)
|
|
66
|
-
case action
|
|
67
|
-
when :missing then "Fish integration was not installed: #{terminal.path(path)}"
|
|
68
|
-
else "Removed fish integration: #{terminal.path(path)}"
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def fish_completions_install_message(action, path)
|
|
73
|
-
case action
|
|
74
|
-
when :unchanged then "Fish completions already installed: #{terminal.path(path)}"
|
|
75
|
-
when :updated then "Updated fish completions: #{terminal.path(path)}"
|
|
76
|
-
else "Installed fish completions: #{terminal.path(path)}"
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
def fish_completions_uninstall_message(action, path)
|
|
81
|
-
case action
|
|
82
|
-
when :missing then "Fish completions were not installed: #{terminal.path(path)}"
|
|
83
|
-
else "Removed fish completions: #{terminal.path(path)}"
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
class Complete < Dry::CLI::Command
|
|
89
|
-
include GlobalOptions
|
|
90
|
-
include Helpers
|
|
91
|
-
|
|
92
|
-
desc "Print completion candidates"
|
|
93
|
-
argument :kind, required: true, desc: "Completion kind"
|
|
94
|
-
argument :extra, type: :array, required: false, desc: "Extra args for completion"
|
|
95
|
-
|
|
96
|
-
def call(kind:, extra: [], **opts)
|
|
97
|
-
setup_terminal(**opts.slice(:color, :colors))
|
|
98
|
-
handle_errors do
|
|
99
|
-
completion_candidates(kind, Array(extra)).each { |c| terminal.say c }
|
|
100
|
-
CLI.record_outcome(Outcome.new(exit_code: 0))
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
private
|
|
105
|
-
|
|
106
|
-
def completion_candidates(kind, args)
|
|
107
|
-
case kind
|
|
108
|
-
when "spaces" then store.list.map { |space| "#{space.id}\t#{space.title}" }
|
|
109
|
-
when "statuses" then Space::VALID_STATUSES
|
|
110
|
-
when "config-keys" then SpaceArchitect::Config::EDITABLE_KEYS
|
|
111
|
-
when "config-values" then completion_values_for_config_key(args.first)
|
|
112
|
-
when "shells" then ["fish"]
|
|
113
|
-
when "color-modes" then %w[auto always never]
|
|
114
|
-
when "repo-subcommands" then %w[add list ls resolve]
|
|
115
|
-
when "config-subcommands" then %w[show path set]
|
|
116
|
-
when "fish-subcommands" then %w[install uninstall path]
|
|
117
|
-
else
|
|
118
|
-
raise SpaceArchitect::Error, "Usage: space shell complete #{completion_kinds.join('|')}"
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
def completion_values_for_config_key(key)
|
|
123
|
-
case key
|
|
124
|
-
when "git_clone_protocol" then SpaceArchitect::Config::VALID_GIT_CLONE_PROTOCOLS
|
|
125
|
-
when "default_provider" then %w[github.com gitlab.com]
|
|
126
|
-
else []
|
|
127
|
-
end
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
def completion_kinds
|
|
131
|
-
%w[spaces statuses config-keys config-values shells color-modes repo-subcommands config-subcommands fish-subcommands]
|
|
132
|
-
end
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
end
|
|
136
|
-
end
|
|
137
|
-
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module SpaceArchitect
|
|
4
|
-
module CLI
|
|
5
|
-
class Show < Dry::CLI::Command
|
|
6
|
-
include GlobalOptions
|
|
7
|
-
include Helpers
|
|
8
|
-
|
|
9
|
-
desc "Show metadata for a space or the current space"
|
|
10
|
-
argument :identifier, required: false, desc: "Space ID or title slug"
|
|
11
|
-
|
|
12
|
-
def call(identifier: nil, **opts)
|
|
13
|
-
setup_terminal(**opts.slice(:color, :colors))
|
|
14
|
-
render(store.find(identifier)) do |space|
|
|
15
|
-
terminal.say "ID: #{space.id}"
|
|
16
|
-
terminal.say "Title: #{space.title}"
|
|
17
|
-
terminal.say "Status: #{space.status}"
|
|
18
|
-
terminal.say "Path: #{terminal.path(space.path)}"
|
|
19
|
-
terminal.say "Created: #{space.data['created_at']}"
|
|
20
|
-
terminal.say "Updated: #{space.data['updated_at']}"
|
|
21
|
-
CLI.record_outcome(Outcome.new(exit_code: 0))
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module SpaceArchitect
|
|
4
|
-
module CLI
|
|
5
|
-
class Status < Dry::CLI::Command
|
|
6
|
-
include GlobalOptions
|
|
7
|
-
include Helpers
|
|
8
|
-
|
|
9
|
-
desc "Set a space status: active, paused, done, archived"
|
|
10
|
-
argument :rest, type: :array, required: false, desc: "[SPACE] STATUS"
|
|
11
|
-
|
|
12
|
-
def call(rest: [], **opts)
|
|
13
|
-
setup_terminal(**opts.slice(:color, :colors))
|
|
14
|
-
handle_errors do
|
|
15
|
-
identifier, status_value = parse_status_args(Array(rest))
|
|
16
|
-
render(store.find(identifier)) do |space|
|
|
17
|
-
space.update_status(status_value)
|
|
18
|
-
terminal.success "#{space.id} is #{space.status}"
|
|
19
|
-
CLI.record_outcome(Outcome.new(exit_code: 0))
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
private
|
|
25
|
-
|
|
26
|
-
def parse_status_args(args)
|
|
27
|
-
case args.length
|
|
28
|
-
when 1
|
|
29
|
-
[nil, args.first]
|
|
30
|
-
when 2
|
|
31
|
-
args
|
|
32
|
-
else
|
|
33
|
-
raise SpaceArchitect::Error, "Usage: space status [SPACE] STATUS"
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module SpaceArchitect
|
|
4
|
-
module CLI
|
|
5
|
-
class Use < Dry::CLI::Command
|
|
6
|
-
include GlobalOptions
|
|
7
|
-
include Helpers
|
|
8
|
-
|
|
9
|
-
desc "Remember a space in recent state and print its path"
|
|
10
|
-
argument :identifier, required: true, desc: "Space ID or title slug"
|
|
11
|
-
|
|
12
|
-
def call(identifier:, **opts)
|
|
13
|
-
setup_terminal(**opts.slice(:color, :colors))
|
|
14
|
-
render(store.use(identifier)) do |space|
|
|
15
|
-
terminal.success "Recent space: #{space.id}"
|
|
16
|
-
terminal.say terminal.path(space.path)
|
|
17
|
-
CLI.record_outcome(Outcome.new(exit_code: 0))
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "space_architect/pristine/version"
|
|
4
|
-
|
|
5
|
-
# repo-tender — keep local git clones evergreen.
|
|
6
|
-
# (clean · on the remote's default branch · fetched within refresh_interval)
|
|
7
|
-
#
|
|
8
|
-
# Slice 1 surface: Paths, Shell, Config::{Model,Contract,Store},
|
|
9
|
-
# State::Store, SCM::{Client,Git,Status}, Forge::{Client,GitHub}.
|
|
10
|
-
# Later slices build sync orchestration, CLI, and launchd on top.
|
|
11
|
-
|
|
12
|
-
module SpaceArchitect::Pristine
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
require "space_architect/pristine/paths"
|
|
16
|
-
require "space_architect/pristine/shell"
|
|
17
|
-
require "space_architect/pristine/config/model"
|
|
18
|
-
require "space_architect/pristine/config/contract"
|
|
19
|
-
require "space_architect/pristine/config/store"
|
|
20
|
-
require "space_architect/pristine/state/store"
|
|
21
|
-
require "space_architect/pristine/state/lock"
|
|
22
|
-
require "space_architect/pristine/scm/client"
|
|
23
|
-
require "space_architect/pristine/scm/status"
|
|
24
|
-
require "space_architect/pristine/scm/git"
|
|
25
|
-
require "space_architect/pristine/forge/client"
|
|
26
|
-
require "space_architect/pristine/forge/github"
|
|
27
|
-
require "space_architect/pristine/sync/repo_plan"
|
|
28
|
-
require "space_architect/pristine/sync/engine"
|
|
29
|
-
require "space_architect/pristine/config/duration"
|
|
30
|
-
require "space_architect/pristine/log_rotator"
|
|
31
|
-
require "space_architect/pristine/launchd/plist"
|
|
32
|
-
require "space_architect/pristine/launchd/agent"
|
|
33
|
-
require "space_architect/pristine/ui/reporter"
|
|
34
|
-
require "space_architect/pristine/ui/mode"
|
|
35
|
-
require "space_architect/pristine/ui/plain_reporter"
|
|
36
|
-
require "space_architect/pristine/ui/json_reporter"
|
|
37
|
-
require "space_architect/pristine/cli"
|
|
38
|
-
require "space_architect/pristine/cli/repo"
|
|
39
|
-
require "space_architect/pristine/cli/org"
|
|
40
|
-
require "space_architect/pristine/cli/sync"
|
|
41
|
-
require "space_architect/pristine/cli/status"
|
|
42
|
-
require "space_architect/pristine/cli/config"
|
|
43
|
-
require "space_architect/pristine/cli/daemon"
|
|
44
|
-
require "space_architect/pristine/cli/clone"
|