aircana 1.5.0.rc2 → 1.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 312d326adcc6bff5172859bc14c0040f66f716afa441dd3fc66222b387e5c076
4
- data.tar.gz: 3a1d3e8284cf9abf68c835dc9b6094ee93d72403109c3a2cce6feb73a999e29c
3
+ metadata.gz: 4006fbfc36508d8914fb2af96e39cc3bf031d8a689f969e2de31974fcb39a944
4
+ data.tar.gz: cfe76006f2f678c063b934cb22d35059bce1759aa9e7fbe3fc92cd0c79848179
5
5
  SHA512:
6
- metadata.gz: 8426996238955fa216e0058dd2f8a6fcdf6dd761ee7fac281787ee4755067e1a33bafbc47f186341d593ac5f844e463e0067163a64dd532ad5a6e4812cdd1809
7
- data.tar.gz: 6a927d67954f765927339bdced8aceef7cdbeaeb47f6b11b8edc89bb65848b722d1a0ff73f458700b0eedaa56125d8c58df823948fe753b451a084dd04a31ff9
6
+ metadata.gz: 424343e973a6ec1aea318b606059568bcac24d381906f4aa7197b32890c1ca0fe4fc6dbcf78569738f2389a72baa1ecea4185e8a94b19ac45f7997ed8d2f283e
7
+ data.tar.gz: afbc895a0e6098ca2727982a1398982ee51a8d926f5766560c92e3eb12afce1ddc23948bb873e032e6158164f214b92981098a4dfbfb7c2017e407ca38c95c49
data/.rspec_status CHANGED
@@ -1,202 +1,207 @@
1
1
  example_id | status | run_time |
2
2
  --------------------------------------------------------------------- | ------ | --------------- |
3
- ./spec/aircana/cli/commands/add_directory_spec.rb[1:1:1:1] | passed | 0.00508 seconds |
4
- ./spec/aircana/cli/commands/add_directory_spec.rb[1:1:2:1] | passed | 0.00086 seconds |
5
- ./spec/aircana/cli/commands/add_directory_spec.rb[1:1:3:1] | passed | 0.00075 seconds |
6
- ./spec/aircana/cli/commands/add_directory_spec.rb[1:1:4:1] | passed | 0.00242 seconds |
7
- ./spec/aircana/cli/commands/add_directory_spec.rb[1:1:4:2:1] | passed | 0.01562 seconds |
8
- ./spec/aircana/cli/commands/add_directory_spec.rb[1:1:5:1] | passed | 0.00316 seconds |
9
- ./spec/aircana/cli/commands/add_directory_spec.rb[1:2:1] | passed | 0.00214 seconds |
10
- ./spec/aircana/cli/commands/add_directory_spec.rb[1:2:2] | passed | 0.00265 seconds |
11
- ./spec/aircana/cli/commands/add_directory_spec.rb[1:3:1] | passed | 0.00092 seconds |
3
+ ./spec/aircana/cli/commands/add_directory_spec.rb[1:1:1:1] | passed | 0.00965 seconds |
4
+ ./spec/aircana/cli/commands/add_directory_spec.rb[1:1:2:1] | passed | 0.00079 seconds |
5
+ ./spec/aircana/cli/commands/add_directory_spec.rb[1:1:3:1] | passed | 0.0008 seconds |
6
+ ./spec/aircana/cli/commands/add_directory_spec.rb[1:1:4:1] | passed | 0.00239 seconds |
7
+ ./spec/aircana/cli/commands/add_directory_spec.rb[1:1:4:2:1] | passed | 0.01447 seconds |
8
+ ./spec/aircana/cli/commands/add_directory_spec.rb[1:1:5:1] | passed | 0.00279 seconds |
9
+ ./spec/aircana/cli/commands/add_directory_spec.rb[1:2:1] | passed | 0.00167 seconds |
10
+ ./spec/aircana/cli/commands/add_directory_spec.rb[1:2:2] | passed | 0.00246 seconds |
11
+ ./spec/aircana/cli/commands/add_directory_spec.rb[1:3:1] | passed | 0.00091 seconds |
12
12
  ./spec/aircana/cli/commands/add_directory_spec.rb[1:3:2] | passed | 0.00078 seconds |
13
- ./spec/aircana/cli/commands/add_directory_spec.rb[1:3:3] | passed | 0.00076 seconds |
14
- ./spec/aircana/cli/commands/add_directory_spec.rb[1:3:4] | passed | 0.00075 seconds |
13
+ ./spec/aircana/cli/commands/add_directory_spec.rb[1:3:3] | passed | 0.00074 seconds |
14
+ ./spec/aircana/cli/commands/add_directory_spec.rb[1:3:4] | passed | 0.00071 seconds |
15
15
  ./spec/aircana/cli/commands/add_directory_spec.rb[1:3:5] | passed | 0.00072 seconds |
16
- ./spec/aircana/cli/commands/add_directory_spec.rb[1:3:6] | passed | 0.00071 seconds |
17
- ./spec/aircana/cli/commands/add_directory_spec.rb[1:3:7] | passed | 0.00093 seconds |
18
- ./spec/aircana/cli/commands/add_directory_spec.rb[1:3:8] | passed | 0.00078 seconds |
19
- ./spec/aircana/cli/commands/agents_spec.rb[1:1:1:1] | passed | 0.00054 seconds |
20
- ./spec/aircana/cli/commands/agents_spec.rb[1:1:1:2] | passed | 0.00041 seconds |
16
+ ./spec/aircana/cli/commands/add_directory_spec.rb[1:3:6] | passed | 0.0007 seconds |
17
+ ./spec/aircana/cli/commands/add_directory_spec.rb[1:3:7] | passed | 0.00071 seconds |
18
+ ./spec/aircana/cli/commands/add_directory_spec.rb[1:3:8] | passed | 0.00111 seconds |
19
+ ./spec/aircana/cli/commands/agents_spec.rb[1:1:1:1] | passed | 0.00049 seconds |
20
+ ./spec/aircana/cli/commands/agents_spec.rb[1:1:1:2] | passed | 0.00033 seconds |
21
21
  ./spec/aircana/cli/commands/agents_spec.rb[1:1:1:3] | passed | 0.00033 seconds |
22
- ./spec/aircana/cli/commands/agents_spec.rb[1:1:2:1] | passed | 0.00109 seconds |
23
- ./spec/aircana/cli/commands/agents_spec.rb[1:1:3:1] | passed | 0.00037 seconds |
24
- ./spec/aircana/cli/commands/agents_spec.rb[1:1:3:2] | passed | 0.00032 seconds |
25
- ./spec/aircana/cli/commands/agents_spec.rb[1:2:1:1] | passed | 0.00053 seconds |
26
- ./spec/aircana/cli/commands/agents_spec.rb[1:2:1:2] | passed | 0.00056 seconds |
27
- ./spec/aircana/cli/commands/agents_spec.rb[1:2:1:3:1] | passed | 0.00288 seconds |
28
- ./spec/aircana/cli/commands/agents_spec.rb[1:2:2:1] | passed | 0.00037 seconds |
29
- ./spec/aircana/cli/commands/agents_spec.rb[1:2:3:1] | passed | 0.00077 seconds |
30
- ./spec/aircana/cli/commands/agents_spec.rb[1:2:4:1] | passed | 0.00039 seconds |
31
- ./spec/aircana/cli/commands/agents_spec.rb[1:3:1] | passed | 0.00074 seconds |
32
- ./spec/aircana/cli/commands/agents_spec.rb[1:3:2] | passed | 0.00062 seconds |
22
+ ./spec/aircana/cli/commands/agents_spec.rb[1:1:2:1] | passed | 0.00102 seconds |
23
+ ./spec/aircana/cli/commands/agents_spec.rb[1:1:3:1] | passed | 0.00035 seconds |
24
+ ./spec/aircana/cli/commands/agents_spec.rb[1:1:3:2] | passed | 0.00048 seconds |
25
+ ./spec/aircana/cli/commands/agents_spec.rb[1:2:1:1] | passed | 0.00052 seconds |
26
+ ./spec/aircana/cli/commands/agents_spec.rb[1:2:1:2] | passed | 0.00046 seconds |
27
+ ./spec/aircana/cli/commands/agents_spec.rb[1:2:1:3:1] | passed | 0.00046 seconds |
28
+ ./spec/aircana/cli/commands/agents_spec.rb[1:2:2:1] | passed | 0.00034 seconds |
29
+ ./spec/aircana/cli/commands/agents_spec.rb[1:2:3:1] | passed | 0.00036 seconds |
30
+ ./spec/aircana/cli/commands/agents_spec.rb[1:2:4:1] | passed | 0.00037 seconds |
31
+ ./spec/aircana/cli/commands/agents_spec.rb[1:3:1] | passed | 0.00048 seconds |
32
+ ./spec/aircana/cli/commands/agents_spec.rb[1:3:2] | passed | 0.00046 seconds |
33
33
  ./spec/aircana/cli/commands/agents_spec.rb[1:3:3] | passed | 0.00044 seconds |
34
- ./spec/aircana/cli/commands/agents_spec.rb[1:4:1] | passed | 0.00027 seconds |
35
- ./spec/aircana/cli/commands/hooks_spec.rb[1:1:1:1] | passed | 0.00081 seconds |
36
- ./spec/aircana/cli/commands/hooks_spec.rb[1:1:2:1:1] | passed | 0.00076 seconds |
37
- ./spec/aircana/cli/commands/hooks_spec.rb[1:1:2:2:1] | passed | 0.00164 seconds |
38
- ./spec/aircana/cli/commands/hooks_spec.rb[1:2:1:1] | passed | 0.00087 seconds |
39
- ./spec/aircana/cli/commands/hooks_spec.rb[1:2:2:1] | passed | 0.00081 seconds |
40
- ./spec/aircana/cli/commands/hooks_spec.rb[1:3:1:1] | passed | 0.0007 seconds |
41
- ./spec/aircana/cli/commands/hooks_spec.rb[1:3:2:1] | passed | 0.00135 seconds |
42
- ./spec/aircana/cli/commands/hooks_spec.rb[1:4:1] | passed | 0.00129 seconds |
43
- ./spec/aircana/cli/commands/hooks_spec.rb[1:4:2:1] | passed | 0.00142 seconds |
44
- ./spec/aircana/cli/commands/hooks_spec.rb[1:5:1:1] | passed | 0.00068 seconds |
45
- ./spec/aircana/cli/commands/hooks_spec.rb[1:5:2:1] | passed | 0.00109 seconds |
34
+ ./spec/aircana/cli/commands/agents_spec.rb[1:4:1] | passed | 0.0002 seconds |
35
+ ./spec/aircana/cli/commands/agents_spec.rb[1:5:1:1] | passed | 0.0006 seconds |
36
+ ./spec/aircana/cli/commands/agents_spec.rb[1:5:2:1] | passed | 0.00052 seconds |
37
+ ./spec/aircana/cli/commands/agents_spec.rb[1:5:3:1] | passed | 0.00334 seconds |
38
+ ./spec/aircana/cli/commands/agents_spec.rb[1:5:3:2] | passed | 0.00117 seconds |
39
+ ./spec/aircana/cli/commands/agents_spec.rb[1:5:3:3] | passed | 0.00111 seconds |
40
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:1:1:1] | passed | 0.0012 seconds |
41
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:1:2:1:1] | passed | 0.00104 seconds |
42
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:1:2:2:1] | passed | 0.0012 seconds |
43
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:2:1:1] | passed | 0.00075 seconds |
44
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:2:2:1] | passed | 0.00094 seconds |
45
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:3:1:1] | passed | 0.00072 seconds |
46
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:3:2:1] | passed | 0.00133 seconds |
47
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:4:1] | passed | 0.00117 seconds |
48
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:4:2:1] | passed | 0.00152 seconds |
49
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:5:1:1] | passed | 0.00065 seconds |
50
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:5:2:1] | passed | 0.00084 seconds |
46
51
  ./spec/aircana/cli/commands/hooks_spec.rb[1:5:3:1] | passed | 0.00105 seconds |
47
- ./spec/aircana/cli/commands/hooks_spec.rb[1:5:4:1] | passed | 0.001 seconds |
48
- ./spec/aircana/cli/commands/hooks_spec.rb[1:6:1:1] | passed | 0.00067 seconds |
49
- ./spec/aircana/cli/commands/hooks_spec.rb[1:6:2:1] | passed | 0.00113 seconds |
50
- ./spec/aircana/cli/commands/hooks_spec.rb[1:7:1] | passed | 0.00066 seconds |
51
- ./spec/aircana/cli/commands/install_spec.rb[1:1:1] | passed | 0.00194 seconds |
52
- ./spec/aircana/cli/commands/install_spec.rb[1:1:2] | passed | 0.00202 seconds |
53
- ./spec/aircana/cli/commands/install_spec.rb[1:2:1:1] | passed | 0.00704 seconds |
54
- ./spec/aircana/cli/commands/install_spec.rb[1:2:2:1] | passed | 0.00851 seconds |
55
- ./spec/aircana/cli/commands/install_spec.rb[1:2:3:1] | passed | 0.0048 seconds |
56
- ./spec/aircana/cli/commands/install_spec.rb[1:2:4:1] | passed | 0.00521 seconds |
57
- ./spec/aircana/cli/commands/install_spec.rb[1:3:1] | passed | 0.00273 seconds |
58
- ./spec/aircana/cli/commands/install_spec.rb[1:3:2:1] | passed | 0.00256 seconds |
59
- ./spec/aircana/cli/commands/install_spec.rb[1:3:3:1] | passed | 0.00291 seconds |
60
- ./spec/aircana/cli/commands/install_spec.rb[1:3:4:1] | passed | 0.00392 seconds |
61
- ./spec/aircana/cli/commands/install_spec.rb[1:4:1] | passed | 0.00111 seconds |
62
- ./spec/aircana/cli/commands/install_spec.rb[1:4:2] | passed | 0.00113 seconds |
63
- ./spec/aircana/cli/commands/install_spec.rb[1:4:3] | passed | 0.00096 seconds |
64
- ./spec/aircana/cli/commands/install_spec.rb[1:4:4] | passed | 0.00092 seconds |
65
- ./spec/aircana/cli/commands/install_spec.rb[1:4:5] | passed | 0.00122 seconds |
66
- ./spec/aircana/cli/commands/install_spec.rb[1:5:1:1] | passed | 0.00128 seconds |
67
- ./spec/aircana/cli/commands/install_spec.rb[1:5:2:1] | passed | 0.00111 seconds |
68
- ./spec/aircana/cli/commands/install_spec.rb[1:5:3:1] | passed | 0.00138 seconds |
69
- ./spec/aircana/cli/commands/install_spec.rb[1:6:1] | passed | 0.00151 seconds |
70
- ./spec/aircana/configuration_spec.rb[1:1:1] | passed | 0.00018 seconds |
71
- ./spec/aircana/configuration_spec.rb[1:2:1] | passed | 0.00007 seconds |
72
- ./spec/aircana/configuration_spec.rb[1:3:1] | passed | 0.00008 seconds |
73
- ./spec/aircana/configuration_spec.rb[1:4:1] | passed | 0.00011 seconds |
74
- ./spec/aircana/configuration_spec.rb[1:5:1] | passed | 0.00008 seconds |
75
- ./spec/aircana/configuration_spec.rb[1:5:2] | passed | 0.00008 seconds |
76
- ./spec/aircana/contexts/confluence_spec.rb[1:1:1:1] | passed | 0.00158 seconds |
77
- ./spec/aircana/contexts/confluence_spec.rb[1:1:1:2] | passed | 0.00038 seconds |
78
- ./spec/aircana/contexts/confluence_spec.rb[1:1:1:3] | passed | 0.0012 seconds |
79
- ./spec/aircana/contexts/confluence_spec.rb[1:1:2:1] | passed | 0.00022 seconds |
80
- ./spec/aircana/contexts/confluence_spec.rb[1:1:2:2] | passed | 0.00014 seconds |
81
- ./spec/aircana/contexts/confluence_spec.rb[1:1:2:3] | passed | 0.00017 seconds |
82
- ./spec/aircana/contexts/confluence_spec.rb[1:1:3:1] | passed | 0.00039 seconds |
83
- ./spec/aircana/contexts/confluence_spec.rb[1:1:3:2] | passed | 0.00039 seconds |
84
- ./spec/aircana/contexts/local_spec.rb[1:1:1] | passed | 0.00131 seconds |
85
- ./spec/aircana/contexts/local_spec.rb[1:1:2] | passed | 0.00122 seconds |
86
- ./spec/aircana/contexts/local_spec.rb[1:1:3] | passed | 0.00131 seconds |
87
- ./spec/aircana/contexts/local_spec.rb[1:1:4] | passed | 0.00118 seconds |
88
- ./spec/aircana/contexts/local_spec.rb[1:1:5] | passed | 0.00124 seconds |
89
- ./spec/aircana/contexts/local_spec.rb[1:1:6] | passed | 0.00137 seconds |
90
- ./spec/aircana/contexts/local_spec.rb[1:1:7] | passed | 0.00188 seconds |
91
- ./spec/aircana/contexts/local_spec.rb[1:1:8] | passed | 0.00129 seconds |
52
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:5:4:1] | passed | 0.00119 seconds |
53
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:6:1:1] | passed | 0.00083 seconds |
54
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:6:2:1] | passed | 0.00154 seconds |
55
+ ./spec/aircana/cli/commands/hooks_spec.rb[1:7:1] | passed | 0.00064 seconds |
56
+ ./spec/aircana/cli/commands/install_spec.rb[1:1:1] | passed | 0.00166 seconds |
57
+ ./spec/aircana/cli/commands/install_spec.rb[1:1:2] | passed | 0.00205 seconds |
58
+ ./spec/aircana/cli/commands/install_spec.rb[1:2:1:1] | passed | 0.00789 seconds |
59
+ ./spec/aircana/cli/commands/install_spec.rb[1:2:2:1] | passed | 0.00563 seconds |
60
+ ./spec/aircana/cli/commands/install_spec.rb[1:2:3:1] | passed | 0.00543 seconds |
61
+ ./spec/aircana/cli/commands/install_spec.rb[1:2:4:1] | passed | 0.00518 seconds |
62
+ ./spec/aircana/cli/commands/install_spec.rb[1:3:1] | passed | 0.00219 seconds |
63
+ ./spec/aircana/cli/commands/install_spec.rb[1:3:2:1] | passed | 0.00194 seconds |
64
+ ./spec/aircana/cli/commands/install_spec.rb[1:3:3:1] | passed | 0.00219 seconds |
65
+ ./spec/aircana/cli/commands/install_spec.rb[1:3:4:1] | passed | 0.00241 seconds |
66
+ ./spec/aircana/cli/commands/install_spec.rb[1:4:1] | passed | 0.00096 seconds |
67
+ ./spec/aircana/cli/commands/install_spec.rb[1:4:2] | passed | 0.00078 seconds |
68
+ ./spec/aircana/cli/commands/install_spec.rb[1:4:3] | passed | 0.00097 seconds |
69
+ ./spec/aircana/cli/commands/install_spec.rb[1:4:4] | passed | 0.00109 seconds |
70
+ ./spec/aircana/cli/commands/install_spec.rb[1:4:5] | passed | 0.00096 seconds |
71
+ ./spec/aircana/cli/commands/install_spec.rb[1:5:1:1] | passed | 0.00144 seconds |
72
+ ./spec/aircana/cli/commands/install_spec.rb[1:5:2:1] | passed | 0.00091 seconds |
73
+ ./spec/aircana/cli/commands/install_spec.rb[1:5:3:1] | passed | 0.00146 seconds |
74
+ ./spec/aircana/cli/commands/install_spec.rb[1:6:1] | passed | 0.00128 seconds |
75
+ ./spec/aircana/configuration_spec.rb[1:1:1] | passed | 0.00015 seconds |
76
+ ./spec/aircana/configuration_spec.rb[1:2:1] | passed | 0.00008 seconds |
77
+ ./spec/aircana/configuration_spec.rb[1:3:1] | passed | 0.00007 seconds |
78
+ ./spec/aircana/configuration_spec.rb[1:4:1] | passed | 0.00007 seconds |
79
+ ./spec/aircana/configuration_spec.rb[1:5:1] | passed | 0.00007 seconds |
80
+ ./spec/aircana/configuration_spec.rb[1:5:2] | passed | 0.00007 seconds |
81
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:1:1] | passed | 0.00163 seconds |
82
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:1:2] | passed | 0.00043 seconds |
83
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:1:3] | passed | 0.00121 seconds |
84
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:2:1] | passed | 0.00015 seconds |
85
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:2:2] | passed | 0.00012 seconds |
86
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:2:3] | passed | 0.00012 seconds |
87
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:3:1] | passed | 0.00036 seconds |
88
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:3:2] | passed | 0.0005 seconds |
89
+ ./spec/aircana/contexts/local_spec.rb[1:1:1] | passed | 0.00136 seconds |
90
+ ./spec/aircana/contexts/local_spec.rb[1:1:2] | passed | 0.00111 seconds |
91
+ ./spec/aircana/contexts/local_spec.rb[1:1:3] | passed | 0.00103 seconds |
92
+ ./spec/aircana/contexts/local_spec.rb[1:1:4] | passed | 0.00102 seconds |
93
+ ./spec/aircana/contexts/local_spec.rb[1:1:5] | passed | 0.00106 seconds |
94
+ ./spec/aircana/contexts/local_spec.rb[1:1:6] | passed | 0.00119 seconds |
95
+ ./spec/aircana/contexts/local_spec.rb[1:1:7] | passed | 0.00163 seconds |
96
+ ./spec/aircana/contexts/local_spec.rb[1:1:8] | passed | 0.0014 seconds |
92
97
  ./spec/aircana/contexts/manifest_spec.rb[1:1:1] | passed | 0.00107 seconds |
93
- ./spec/aircana/contexts/manifest_spec.rb[1:1:2] | passed | 0.00111 seconds |
98
+ ./spec/aircana/contexts/manifest_spec.rb[1:1:2] | passed | 0.00105 seconds |
94
99
  ./spec/aircana/contexts/manifest_spec.rb[1:2:1] | passed | 1.01 seconds |
95
- ./spec/aircana/contexts/manifest_spec.rb[1:2:2] | passed | 0.00212 seconds |
96
- ./spec/aircana/contexts/manifest_spec.rb[1:3:1] | passed | 0.00115 seconds |
97
- ./spec/aircana/contexts/manifest_spec.rb[1:3:2] | passed | 0.00024 seconds |
98
- ./spec/aircana/contexts/manifest_spec.rb[1:3:3] | passed | 0.00125 seconds |
99
- ./spec/aircana/contexts/manifest_spec.rb[1:3:4] | passed | 0.00096 seconds |
100
- ./spec/aircana/contexts/manifest_spec.rb[1:4:1] | passed | 0.00096 seconds |
100
+ ./spec/aircana/contexts/manifest_spec.rb[1:2:2] | passed | 0.00342 seconds |
101
+ ./spec/aircana/contexts/manifest_spec.rb[1:3:1] | passed | 0.00291 seconds |
102
+ ./spec/aircana/contexts/manifest_spec.rb[1:3:2] | passed | 0.00051 seconds |
103
+ ./spec/aircana/contexts/manifest_spec.rb[1:3:3] | passed | 0.00226 seconds |
104
+ ./spec/aircana/contexts/manifest_spec.rb[1:3:4] | passed | 0.00187 seconds |
105
+ ./spec/aircana/contexts/manifest_spec.rb[1:4:1] | passed | 0.00178 seconds |
101
106
  ./spec/aircana/contexts/manifest_spec.rb[1:4:2] | passed | 0.00036 seconds |
102
- ./spec/aircana/contexts/manifest_spec.rb[1:5:1] | passed | 0.00097 seconds |
103
- ./spec/aircana/contexts/manifest_spec.rb[1:5:2] | passed | 0.00031 seconds |
104
- ./spec/aircana/contexts/manifest_spec.rb[1:6:1] | passed | 0.00026 seconds |
105
- ./spec/aircana/contexts/manifest_spec.rb[1:6:2] | passed | 0.00021 seconds |
106
- ./spec/aircana/contexts/manifest_spec.rb[1:6:3] | passed | 0.0002 seconds |
107
- ./spec/aircana/contexts/manifest_spec.rb[1:6:4] | passed | 0.00023 seconds |
108
- ./spec/aircana/contexts/manifest_spec.rb[1:6:5] | passed | 0.00022 seconds |
109
- ./spec/aircana/contexts/manifest_spec.rb[1:6:6] | passed | 0.00023 seconds |
110
- ./spec/aircana/contexts/manifest_spec.rb[1:6:7] | passed | 0.0002 seconds |
111
- ./spec/aircana/contexts/manifest_spec.rb[1:6:8] | passed | 0.0002 seconds |
112
- ./spec/aircana/contexts/manifest_spec.rb[1:6:9] | passed | 0.00092 seconds |
113
- ./spec/aircana/contexts/web_spec.rb[1:1:1] | passed | 0.00022 seconds |
114
- ./spec/aircana/contexts/web_spec.rb[1:2:1] | passed | 0.00018 seconds |
115
- ./spec/aircana/contexts/web_spec.rb[1:3:1:1] | passed | 0.00013 seconds |
116
- ./spec/aircana/contexts/web_spec.rb[1:3:1:2] | passed | 0.0001 seconds |
117
- ./spec/aircana/contexts/web_spec.rb[1:3:1:3] | passed | 0.00012 seconds |
118
- ./spec/aircana/contexts/web_spec.rb[1:3:2:1] | passed | 0.00016 seconds |
119
- ./spec/aircana/contexts/web_spec.rb[1:3:2:2] | passed | 0.00011 seconds |
120
- ./spec/aircana/contexts/web_spec.rb[1:3:3:1] | passed | 0.00019 seconds |
121
- ./spec/aircana/contexts/web_spec.rb[1:3:3:2] | passed | 0.00028 seconds |
122
- ./spec/aircana/contexts/web_spec.rb[1:3:3:3] | passed | 0.00023 seconds |
123
- ./spec/aircana/contexts/web_spec.rb[1:3:3:4] | passed | 0.00017 seconds |
124
- ./spec/aircana/contexts/web_spec.rb[1:3:3:5] | passed | 0.00264 seconds |
125
- ./spec/aircana/contexts/web_spec.rb[1:3:4:1] | passed | 0.00013 seconds |
126
- ./spec/aircana/contexts/web_spec.rb[1:3:4:2] | passed | 0.00011 seconds |
127
- ./spec/aircana/contexts/web_spec.rb[1:3:4:3] | passed | 0.0003 seconds |
128
- ./spec/aircana/contexts/web_spec.rb[1:3:5:1] | passed | 0.00045 seconds |
129
- ./spec/aircana/contexts/web_spec.rb[1:3:5:2] | passed | 0.00013 seconds |
130
- ./spec/aircana/contexts/web_spec.rb[1:3:5:3] | passed | 0.00071 seconds |
131
- ./spec/aircana/contexts/web_spec.rb[1:3:6:1] | passed | 0.00026 seconds |
132
- ./spec/aircana/contexts/web_spec.rb[1:3:6:2] | passed | 0.00028 seconds |
133
- ./spec/aircana/contexts/web_spec.rb[1:3:6:3] | passed | 0.00024 seconds |
134
- ./spec/aircana/contexts/web_spec.rb[1:3:7:1] | passed | 0.00012 seconds |
135
- ./spec/aircana/contexts/web_spec.rb[1:3:7:2] | passed | 0.0001 seconds |
136
- ./spec/aircana/fzf_helper_spec.rb[1:1:1:1] | passed | 0.00017 seconds |
137
- ./spec/aircana/fzf_helper_spec.rb[1:1:1:2] | passed | 0.00015 seconds |
138
- ./spec/aircana/fzf_helper_spec.rb[1:1:1:3] | passed | 0.00018 seconds |
139
- ./spec/aircana/fzf_helper_spec.rb[1:1:2:1] | passed | 0.0002 seconds |
140
- ./spec/aircana/fzf_helper_spec.rb[1:1:3:1] | passed | 0.00039 seconds |
141
- ./spec/aircana/fzf_helper_spec.rb[1:2:1:1] | passed | 0.00019 seconds |
142
- ./spec/aircana/fzf_helper_spec.rb[1:2:1:2] | passed | 0.00018 seconds |
143
- ./spec/aircana/fzf_helper_spec.rb[1:2:1:3] | passed | 0.00017 seconds |
144
- ./spec/aircana/fzf_helper_spec.rb[1:2:2:1] | passed | 0.00016 seconds |
145
- ./spec/aircana/fzf_helper_spec.rb[1:2:2:2] | passed | 0.00012 seconds |
107
+ ./spec/aircana/contexts/manifest_spec.rb[1:5:1] | passed | 0.00149 seconds |
108
+ ./spec/aircana/contexts/manifest_spec.rb[1:5:2] | passed | 0.00035 seconds |
109
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:1] | passed | 0.0004 seconds |
110
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:2] | passed | 0.00035 seconds |
111
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:3] | passed | 0.00037 seconds |
112
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:4] | passed | 0.00038 seconds |
113
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:5] | passed | 0.00037 seconds |
114
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:6] | passed | 0.00039 seconds |
115
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:7] | passed | 0.00034 seconds |
116
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:8] | passed | 0.00031 seconds |
117
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:9] | passed | 0.00144 seconds |
118
+ ./spec/aircana/contexts/web_spec.rb[1:1:1] | passed | 0.00035 seconds |
119
+ ./spec/aircana/contexts/web_spec.rb[1:2:1] | passed | 0.00035 seconds |
120
+ ./spec/aircana/contexts/web_spec.rb[1:3:1:1] | passed | 0.0002 seconds |
121
+ ./spec/aircana/contexts/web_spec.rb[1:3:1:2] | passed | 0.00018 seconds |
122
+ ./spec/aircana/contexts/web_spec.rb[1:3:1:3] | passed | 0.00017 seconds |
123
+ ./spec/aircana/contexts/web_spec.rb[1:3:2:1] | passed | 0.00027 seconds |
124
+ ./spec/aircana/contexts/web_spec.rb[1:3:2:2] | passed | 0.00019 seconds |
125
+ ./spec/aircana/contexts/web_spec.rb[1:3:3:1] | passed | 0.00032 seconds |
126
+ ./spec/aircana/contexts/web_spec.rb[1:3:3:2] | passed | 0.00046 seconds |
127
+ ./spec/aircana/contexts/web_spec.rb[1:3:3:3] | passed | 0.0004 seconds |
128
+ ./spec/aircana/contexts/web_spec.rb[1:3:3:4] | passed | 0.00026 seconds |
129
+ ./spec/aircana/contexts/web_spec.rb[1:3:3:5] | passed | 0.00036 seconds |
130
+ ./spec/aircana/contexts/web_spec.rb[1:3:4:1] | passed | 0.00021 seconds |
131
+ ./spec/aircana/contexts/web_spec.rb[1:3:4:2] | passed | 0.00019 seconds |
132
+ ./spec/aircana/contexts/web_spec.rb[1:3:4:3] | passed | 0.00019 seconds |
133
+ ./spec/aircana/contexts/web_spec.rb[1:3:5:1] | passed | 0.00061 seconds |
134
+ ./spec/aircana/contexts/web_spec.rb[1:3:5:2] | passed | 0.00018 seconds |
135
+ ./spec/aircana/contexts/web_spec.rb[1:3:5:3] | passed | 0.00046 seconds |
136
+ ./spec/aircana/contexts/web_spec.rb[1:3:6:1] | passed | 0.00039 seconds |
137
+ ./spec/aircana/contexts/web_spec.rb[1:3:6:2] | passed | 0.00034 seconds |
138
+ ./spec/aircana/contexts/web_spec.rb[1:3:6:3] | passed | 0.00033 seconds |
139
+ ./spec/aircana/contexts/web_spec.rb[1:3:7:1] | passed | 0.00017 seconds |
140
+ ./spec/aircana/contexts/web_spec.rb[1:3:7:2] | passed | 0.00015 seconds |
141
+ ./spec/aircana/fzf_helper_spec.rb[1:1:1:1] | passed | 0.00022 seconds |
142
+ ./spec/aircana/fzf_helper_spec.rb[1:1:1:2] | passed | 0.00022 seconds |
143
+ ./spec/aircana/fzf_helper_spec.rb[1:1:1:3] | passed | 0.00026 seconds |
144
+ ./spec/aircana/fzf_helper_spec.rb[1:1:2:1] | passed | 0.0003 seconds |
145
+ ./spec/aircana/fzf_helper_spec.rb[1:1:3:1] | passed | 0.00029 seconds |
146
+ ./spec/aircana/fzf_helper_spec.rb[1:2:1:1] | passed | 0.00016 seconds |
147
+ ./spec/aircana/fzf_helper_spec.rb[1:2:1:2] | passed | 0.00015 seconds |
148
+ ./spec/aircana/fzf_helper_spec.rb[1:2:1:3] | passed | 0.00015 seconds |
149
+ ./spec/aircana/fzf_helper_spec.rb[1:2:2:1] | passed | 0.00015 seconds |
150
+ ./spec/aircana/fzf_helper_spec.rb[1:2:2:2] | passed | 0.00017 seconds |
146
151
  ./spec/aircana/generators/agents_generator_spec.rb[1:1:1] | passed | 0.00005 seconds |
147
- ./spec/aircana/generators/agents_generator_spec.rb[1:2:1] | passed | 0.00023 seconds |
148
- ./spec/aircana/generators/agents_generator_spec.rb[1:3:1:1] | passed | 0.00007 seconds |
149
- ./spec/aircana/generators/agents_generator_spec.rb[1:3:1:2] | passed | 0.00007 seconds |
152
+ ./spec/aircana/generators/agents_generator_spec.rb[1:2:1] | passed | 0.00024 seconds |
153
+ ./spec/aircana/generators/agents_generator_spec.rb[1:3:1:1] | passed | 0.00008 seconds |
154
+ ./spec/aircana/generators/agents_generator_spec.rb[1:3:1:2] | passed | 0.00006 seconds |
150
155
  ./spec/aircana/generators/agents_generator_spec.rb[1:4:1:1] | passed | 0.00006 seconds |
151
- ./spec/aircana/generators/hooks_generator_spec.rb[1:1:1] | passed | 0.00005 seconds |
156
+ ./spec/aircana/generators/hooks_generator_spec.rb[1:1:1] | passed | 0.00004 seconds |
152
157
  ./spec/aircana/generators/hooks_generator_spec.rb[1:2:1] | passed | 0.00004 seconds |
153
158
  ./spec/aircana/generators/hooks_generator_spec.rb[1:3:1] | passed | 0.00058 seconds |
154
- ./spec/aircana/generators/hooks_generator_spec.rb[1:3:2] | passed | 0.00032 seconds |
155
- ./spec/aircana/generators/hooks_generator_spec.rb[1:4:1] | passed | 0.00015 seconds |
159
+ ./spec/aircana/generators/hooks_generator_spec.rb[1:3:2] | passed | 0.0003 seconds |
160
+ ./spec/aircana/generators/hooks_generator_spec.rb[1:4:1] | passed | 0.00014 seconds |
156
161
  ./spec/aircana/generators/hooks_generator_spec.rb[1:5:1:1] | passed | 0.00014 seconds |
157
- ./spec/aircana/generators/hooks_generator_spec.rb[1:5:2:1] | passed | 0.00006 seconds |
158
- ./spec/aircana/generators/hooks_generator_spec.rb[1:6:1] | passed | 0.00089 seconds |
159
- ./spec/aircana/generators/hooks_generator_spec.rb[1:7:1] | passed | 0.00022 seconds |
160
- ./spec/aircana/generators/plan_command_generator_spec.rb[1:1:1] | passed | 0.00063 seconds |
162
+ ./spec/aircana/generators/hooks_generator_spec.rb[1:5:2:1] | passed | 0.00005 seconds |
163
+ ./spec/aircana/generators/hooks_generator_spec.rb[1:6:1] | passed | 0.00072 seconds |
164
+ ./spec/aircana/generators/hooks_generator_spec.rb[1:7:1] | passed | 0.0002 seconds |
165
+ ./spec/aircana/generators/plan_command_generator_spec.rb[1:1:1] | passed | 0.00047 seconds |
161
166
  ./spec/aircana/generators/plan_command_generator_spec.rb[1:1:2] | passed | 0.00042 seconds |
162
- ./spec/aircana/generators/plan_command_generator_spec.rb[1:1:3] | passed | 0.00036 seconds |
163
- ./spec/aircana/generators/plan_command_generator_spec.rb[1:2:1] | passed | 0.0001 seconds |
164
- ./spec/aircana/generators/plan_command_generator_spec.rb[1:2:2] | passed | 0.00018 seconds |
165
- ./spec/aircana/generators/write_plan_command_generator_spec.rb[1:1:1] | passed | 0.00022 seconds |
166
- ./spec/aircana/generators/write_plan_command_generator_spec.rb[1:2:1] | passed | 0.00054 seconds |
167
- ./spec/aircana/generators/write_plan_command_generator_spec.rb[1:2:2] | passed | 0.00009 seconds |
168
- ./spec/aircana/human_logger_spec.rb[1:1:1] | passed | 0.00006 seconds |
169
- ./spec/aircana/human_logger_spec.rb[1:2:1] | passed | 0.00004 seconds |
170
- ./spec/aircana/human_logger_spec.rb[1:3:1] | passed | 0.00004 seconds |
171
- ./spec/aircana/human_logger_spec.rb[1:4:1] | passed | 0.00004 seconds |
172
- ./spec/aircana/human_logger_spec.rb[1:5:1] | passed | 0.00003 seconds |
167
+ ./spec/aircana/generators/plan_command_generator_spec.rb[1:1:3] | passed | 0.00039 seconds |
168
+ ./spec/aircana/generators/plan_command_generator_spec.rb[1:2:1] | passed | 0.00013 seconds |
169
+ ./spec/aircana/generators/plan_command_generator_spec.rb[1:2:2] | passed | 0.0001 seconds |
170
+ ./spec/aircana/generators/write_plan_command_generator_spec.rb[1:1:1] | passed | 0.00028 seconds |
171
+ ./spec/aircana/generators/write_plan_command_generator_spec.rb[1:2:1] | passed | 0.00066 seconds |
172
+ ./spec/aircana/generators/write_plan_command_generator_spec.rb[1:2:2] | passed | 0.00012 seconds |
173
+ ./spec/aircana/human_logger_spec.rb[1:1:1] | passed | 0.00008 seconds |
174
+ ./spec/aircana/human_logger_spec.rb[1:2:1] | passed | 0.00005 seconds |
175
+ ./spec/aircana/human_logger_spec.rb[1:3:1] | passed | 0.00005 seconds |
176
+ ./spec/aircana/human_logger_spec.rb[1:4:1] | passed | 0.00005 seconds |
177
+ ./spec/aircana/human_logger_spec.rb[1:5:1] | passed | 0.00004 seconds |
173
178
  ./spec/aircana/human_logger_spec.rb[1:5:2] | passed | 0.00004 seconds |
174
- ./spec/aircana/human_logger_spec.rb[1:5:3] | passed | 0.00003 seconds |
179
+ ./spec/aircana/human_logger_spec.rb[1:5:3] | passed | 0.00004 seconds |
175
180
  ./spec/aircana/human_logger_spec.rb[1:5:4] | passed | 0.00004 seconds |
176
- ./spec/aircana/human_logger_spec.rb[1:5:5] | passed | 0.00012 seconds |
181
+ ./spec/aircana/human_logger_spec.rb[1:5:5] | passed | 0.00004 seconds |
177
182
  ./spec/aircana/human_logger_spec.rb[1:5:6] | passed | 0.00004 seconds |
178
- ./spec/aircana/human_logger_spec.rb[1:5:7] | passed | 0.00004 seconds |
179
- ./spec/aircana/human_logger_spec.rb[1:6:1] | passed | 0.00003 seconds |
180
- ./spec/aircana/llm/claude_client_spec.rb[1:1:1:1] | passed | 0.00042 seconds |
181
- ./spec/aircana/llm/claude_client_spec.rb[1:1:1:2] | passed | 0.00037 seconds |
182
- ./spec/aircana/llm/claude_client_spec.rb[1:1:1:3] | passed | 0.00038 seconds |
183
- ./spec/aircana/llm/claude_client_spec.rb[1:1:1:4] | passed | 0.00034 seconds |
184
- ./spec/aircana/llm/claude_client_spec.rb[1:1:2:1] | passed | 0.00038 seconds |
185
- ./spec/aircana/llm/claude_client_spec.rb[1:1:2:2] | passed | 0.00035 seconds |
186
- ./spec/aircana/llm/claude_client_spec.rb[1:1:3:1] | passed | 0.00036 seconds |
187
- ./spec/aircana/llm/claude_client_spec.rb[1:2:1] | passed | 0.00034 seconds |
188
- ./spec/aircana/llm/claude_client_spec.rb[1:2:2] | passed | 0.00033 seconds |
189
- ./spec/aircana/llm/claude_client_spec.rb[1:3:1:1] | passed | 0.00022 seconds |
190
- ./spec/aircana/llm/claude_client_spec.rb[1:3:1:2] | passed | 0.00022 seconds |
191
- ./spec/aircana/system_checker_spec.rb[1:1:1:1] | passed | 0.00032 seconds |
192
- ./spec/aircana/system_checker_spec.rb[1:1:2:1] | passed | 0.00044 seconds |
193
- ./spec/aircana/system_checker_spec.rb[1:1:3:1] | passed | 0.00065 seconds |
194
- ./spec/aircana/system_checker_spec.rb[1:2:1] | passed | 0.00024 seconds |
195
- ./spec/aircana/system_checker_spec.rb[1:2:2] | passed | 0.00022 seconds |
196
- ./spec/aircana/system_checker_spec.rb[1:3:1] | passed | 0.00024 seconds |
197
- ./spec/aircana/system_checker_spec.rb[1:3:2] | passed | 0.00044 seconds |
198
- ./spec/aircana/system_checker_spec.rb[1:3:3] | passed | 0.00031 seconds |
199
- ./spec/aircana/system_checker_spec.rb[1:3:4] | passed | 0.00028 seconds |
200
- ./spec/aircana/system_checker_spec.rb[1:3:5] | passed | 0.00018 seconds |
183
+ ./spec/aircana/human_logger_spec.rb[1:5:7] | passed | 0.00005 seconds |
184
+ ./spec/aircana/human_logger_spec.rb[1:6:1] | passed | 0.00004 seconds |
185
+ ./spec/aircana/llm/claude_client_spec.rb[1:1:1:1] | passed | 0.0006 seconds |
186
+ ./spec/aircana/llm/claude_client_spec.rb[1:1:1:2] | passed | 0.00316 seconds |
187
+ ./spec/aircana/llm/claude_client_spec.rb[1:1:1:3] | passed | 0.00037 seconds |
188
+ ./spec/aircana/llm/claude_client_spec.rb[1:1:1:4] | passed | 0.00081 seconds |
189
+ ./spec/aircana/llm/claude_client_spec.rb[1:1:2:1] | passed | 0.00041 seconds |
190
+ ./spec/aircana/llm/claude_client_spec.rb[1:1:2:2] | passed | 0.00036 seconds |
191
+ ./spec/aircana/llm/claude_client_spec.rb[1:1:3:1] | passed | 0.00066 seconds |
192
+ ./spec/aircana/llm/claude_client_spec.rb[1:2:1] | passed | 0.00036 seconds |
193
+ ./spec/aircana/llm/claude_client_spec.rb[1:2:2] | passed | 0.0005 seconds |
194
+ ./spec/aircana/llm/claude_client_spec.rb[1:3:1:1] | passed | 0.00025 seconds |
195
+ ./spec/aircana/llm/claude_client_spec.rb[1:3:1:2] | passed | 0.00023 seconds |
196
+ ./spec/aircana/system_checker_spec.rb[1:1:1:1] | passed | 0.00035 seconds |
197
+ ./spec/aircana/system_checker_spec.rb[1:1:2:1] | passed | 0.00058 seconds |
198
+ ./spec/aircana/system_checker_spec.rb[1:1:3:1] | passed | 0.0008 seconds |
199
+ ./spec/aircana/system_checker_spec.rb[1:2:1] | passed | 0.0003 seconds |
200
+ ./spec/aircana/system_checker_spec.rb[1:2:2] | passed | 0.00024 seconds |
201
+ ./spec/aircana/system_checker_spec.rb[1:3:1] | passed | 0.00023 seconds |
202
+ ./spec/aircana/system_checker_spec.rb[1:3:2] | passed | 0.00025 seconds |
203
+ ./spec/aircana/system_checker_spec.rb[1:3:3] | passed | 0.00036 seconds |
204
+ ./spec/aircana/system_checker_spec.rb[1:3:4] | passed | 0.00033 seconds |
205
+ ./spec/aircana/system_checker_spec.rb[1:3:5] | passed | 0.0002 seconds |
201
206
  ./spec/aircana_spec.rb[1:1] | passed | 0.00004 seconds |
202
- ./spec/aircana_spec.rb[1:2] | passed | 0.00069 seconds |
207
+ ./spec/aircana_spec.rb[1:2] | passed | 0.00082 seconds |
data/CHANGELOG.md CHANGED
@@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.5.0] - 2025-09-28
11
+
12
+ ### Added
13
+ - New Jira agent: Specialized agent for Jira MCP tool interactions, handles reading and writing tickets efficiently
14
+ - New `air-write-plan` command: Generates command for writing structured plans to files
15
+ - Write plan command generator for creating plan documentation templates
16
+
17
+ ### Changed
18
+ - Enhanced planner agent with improved workflow split into smaller, focused chunks
19
+ - Updated planner agent to utilize todo list file management for better task tracking
20
+ - Improved planner instructions with clearer guidance for each planning phase
21
+ - Updated README with additional documentation
22
+
23
+ ### Fixed
24
+ - Fixed test spec that previously required running locally for proper execution
25
+
10
26
  ## [1.4.0] - 2025-09-27
11
27
 
12
28
  ### Added
data/CLAUDE.md CHANGED
@@ -35,6 +35,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
35
35
  - `aircana install` - Install generated files to Claude Code config
36
36
  - `aircana agents create` - Create a new agent interactively
37
37
  - `aircana agents refresh <agent>` - Refresh agent knowledge from Confluence and web sources
38
+ - `aircana agents refresh-all` - Refresh knowledge for all configured agents
38
39
  - `aircana agents add-url <agent> <url>` - Add a web URL to an agent's knowledge base
39
40
  - `aircana hooks list` - List all available hooks
40
41
  - `aircana hooks enable <hook>` - Enable a specific hook
data/README.md CHANGED
@@ -1,11 +1,27 @@
1
1
  # Aircana
2
2
 
3
- A Ruby CLI utility for context management and Claude Code integration. Aircana helps manage relevant files for development sessions, create specialized Claude Code agents, and optionally sync knowledge from Confluence.
4
-
5
3
  [![Ruby](https://github.com/westonkd/aircana/actions/workflows/main.yml/badge.svg)](https://github.com/westonkd/aircana/actions/workflows/main.yml)
6
4
  [![Gem Version](https://badge.fury.io/rb/aircana.svg)](https://badge.fury.io/rb/aircana)
7
5
 
8
- ## Installation
6
+ ## Intro
7
+
8
+ Aircana aims to be a "batteries-included" CLI for common needs of Instructure Engineering teams using agents in development. It provides:
9
+
10
+ Consistent artifact generation and updating of agent, slash command, and hook ERB templates.
11
+
12
+ Subagent generation for improved context window management.
13
+
14
+ Agent-accessible knowledge bases sourced from Confluence or public websites, backed by manifest files.
15
+
16
+ Development workflow with plan, record, and execute phases (record and execute phases are in progress).
17
+
18
+ SQS integration for features like Slack notifications and messages.
19
+
20
+ While Aircana includes features beneficial in many agentic contexts (like knowledge base syncing), its primary tools are built on "human-in-the-loop" principles.
21
+
22
+ ## How can I try it?
23
+
24
+ ### Installation
9
25
 
10
26
  Install the gem:
11
27
 
@@ -13,106 +29,108 @@ Install the gem:
13
29
  gem install aircana
14
30
  ```
15
31
 
16
- Or add to your Gemfile:
32
+ Verify installation and dependency setup:
17
33
 
18
- ```ruby
19
- gem 'aircana'
34
+ ```bash
35
+ aircana doctor
20
36
  ```
21
37
 
22
- Then run:
38
+ Install Aircana files into your repo:
23
39
 
24
40
  ```bash
25
- bundle install
41
+ cd ~/my/repo
42
+ aircana install # This is a no-op if the repo already uses .aircana
26
43
  ```
27
44
 
28
- Verify installation and check dependencies:
45
+ ### Take it for a spin
46
+
47
+ If your project previously had Aircana agents set up, run the following to populate each defined agent's knowledge base:
29
48
 
30
49
  ```bash
31
- aircana doctor
50
+ aircana agents refresh-all
32
51
  ```
33
52
 
34
- ## Prerequisites
53
+ To start using your agents with domain-specific knowledge, follow the agent workflow tutorial.
54
+
55
+ ### Things to try
56
+
57
+ - Configure the Confluence integration and create your own domain-specific subagent
58
+
59
+ - Launch Claude Code and view the hooks installed by Aircana (prefixed with air). The /air-ask-expert command is pretty handy once you set up some agents with knowledbases.
35
60
 
36
- ### Required Dependencies
37
- - Ruby >= 3.3.0
38
- - `git` (version control operations)
39
- - `fzf` (interactive file selection)
61
+ - Set up the SQS integration to receive Slack messages when Claude Code needs your attention (documentation coming soon).
40
62
 
41
- ### Optional Dependencies
42
- - `bat` (enhanced file previews, falls back to `cat`)
43
- - `fd` (faster file searching, falls back to `find`)
63
+ - Explore other tools by running `aircana --help`
44
64
 
45
- ### For Confluence Integration (Optional)
46
- - Access to a Confluence instance
47
- - Confluence API token
48
- - Appropriate permissions to read pages and labels
65
+ ## Key Concepts
49
66
 
50
- ## Core Concepts
67
+ ### Subagents
51
68
 
52
- Aircana provides two main independent features:
69
+ Subagents are domain-specific agents to whom the primary Claude Code agent can delegate tasks and questions.
53
70
 
54
- ### 1. Relevant Files Management
55
- Track and manage a curated set of "relevant files" - the current working set of important files for your development session. This context is automatically available to Claude Code sessions.
71
+ Each subagent has its own context window. Effectively using subagents can keep the main context window and per-agent context windows smaller for longer, leading to much more usable results and reducing the need to remind agents of core principles and tasks.
56
72
 
57
- **This works completely independently from agents** - you can use relevant files without creating any agents.
73
+ Claude Code can also run subagents in parallel. A "swarm" of appropriately designed subagents can expedite planning and execution tasks while considering a broader context.
74
+
75
+ Aircana allows easy generation of subagents and binds each to an agent-specific knowledge base with documents from Confluence or websites.
76
+
77
+ ### Knowledge Bases
78
+
79
+ Aircana provides each subagent access to a human-curated knowledge base. This access enables Aircana-managed subagents to yield more relevant results, minimizing back-and-forth between the human operator and the agent.
80
+
81
+ After initial agent creation, Aircana supports refreshing agents' knowledge bases with the latest versions of each source.
82
+
83
+ #### Confluence
84
+
85
+ To add a Confluence page to an agent's knowledge base, label the desired page in Confluence, then run `aircana agent refresh <AGENT>`.
86
+
87
+ Aircana will also pull any Confluence pages labeled with a matching agent name during initial agent creation (`aircana agent create`).
88
+
89
+ See the Confluence setup guide or run `aircana doctor` for instructions on setting up Confluence integration.
90
+
91
+ #### Websites
92
+
93
+ In addition to Confluence sources, Aircana allows adding arbitrary public websites to a knowledge base.
94
+
95
+ Websites are also refreshed when `aircana agent refresh <AGENT>` is used.
96
+
97
+ #### Structure
98
+
99
+ Knowledge bases are stored in the .aircana directory of each project. For example:
100
+
101
+ ```
102
+ .aircana
103
+ ├── agents
104
+ │ ├── canvas-backend-account-expert
105
+ │ │ ├── knowledge
106
+ │ │ │ ├── Accounts.md
107
+ │ │ │ └── Subdomains-&-Request-Routing.md
108
+ │ │ └── manifest.json
109
+ ```
58
110
 
59
- ### 2. Specialized Agents (Optional)
60
- Create Claude Code agents with:
61
- - **Domain Knowledge**: Focused expertise in specific areas
62
- - **Confluence Integration**: Knowledge sync from labeled pages (requires Confluence setup)
63
- - **Customizable Models**: Choose from different Claude models and interface colors
111
+ Agent files in the .claude/agents directory reference these files.
64
112
 
65
- **Agents work independently from relevant files** - you can create agents without managing relevant files.
113
+ In many cases, adding the actual knowledge base to version control is undesirable because:
66
114
 
67
- ### Knowledge Sources
68
- - **Relevant Files**: Current working set managed by Aircana (independent feature)
69
- - **Confluence Pages**: Fetched based on agent labels (agent feature, requires setup)
70
- - **Web URLs**: Any web content added to agent knowledge bases (HTML converted to Markdown)
71
- - **Local Context**: Project-specific files and configurations
115
+ There may be numerous files in the knowledge base, bloating repository size.
72
116
 
73
- ## What Aircana Does
117
+ Knowledge bases may contain sensitive information that should not be public in an open-source project.
74
118
 
75
- - **File Context Management**: Track and manage relevant files for Claude Code sessions
76
- - **Agent Configuration**: Create and configure specialized Claude Code agents
77
- - **Confluence Integration**: Sync knowledge from Confluence pages to agents (optional)
78
- - **Claude Code Shortcuts**: Quick-launch Claude Code with pre-configured agents
79
- - **System Health Checks**: Validate dependencies and configuration
119
+ Aircana manages a per-agent manifest.json file to address these concerns.
80
120
 
81
- ## Quick Start
121
+ ### Consistent Artifacts
82
122
 
83
- 1. **Install and verify**:
84
- ```bash
85
- gem install aircana
86
- aircana doctor
87
- ```
123
+ Aircana maintains a set of ERB templates for generating Claude Code agents, hooks, and slash commands consistently.
88
124
 
89
- 2. **Set up your project**:
90
- ```bash
91
- cd your-project
92
- aircana generate
93
- aircana install # Set up Aircana integration in this project
94
- ```
125
+ These templates promote best practices and help new users quickly create effective artifacts without extensive trial and error.
95
126
 
96
- 3. **Add files to context**:
97
- ```bash
98
- aircana files add # Interactive selection
99
- ```
127
+ ### SQS Integration (Slack Integration at Instructure)
100
128
 
101
- Then in Claude Code, include them whenever you want to reload the files into the current context:
102
- ```
103
- /add-relevant-files
104
- ```
129
+ Aircana uses the "Notification" Claude Code hook to send messages to SQS.
105
130
 
106
- 4. **Create an agent** (optional, but powerful with Confluence):
107
- ```bash
108
- aircana agents create # Tag Confluence pages with the agent's name before or after creation to pull that knowledge into the agent's knowledge base.
109
- ```
131
+ At Instructure this means you can easily configure Claude Code to send you slack messages when it needs your attention via Aircana
110
132
 
111
- 5. **View your current context**:
112
- ```bash
113
- aircana files list # See all tracked files
114
- aircana agents list # See all configured agents
115
- ```
133
+ (Instructions coming soon, send a message if you want help with this)
116
134
 
117
135
  ## Configuration (Optional)
118
136
 
@@ -91,6 +91,11 @@ module Aircana
91
91
  def add_url(agent, url)
92
92
  Agents.add_url(agent, url)
93
93
  end
94
+
95
+ desc "refresh-all", "Refresh knowledge for all configured agents"
96
+ def refresh_all
97
+ Agents.refresh_all
98
+ end
94
99
  end
95
100
 
96
101
  class HooksSubcommand < Subcommand
@@ -101,6 +101,38 @@ module Aircana
101
101
  exit 1
102
102
  end
103
103
 
104
+ def refresh_all # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
105
+ agent_names = all_agents
106
+
107
+ if agent_names.empty?
108
+ Aircana.human_logger.info "No agents found to refresh."
109
+ return
110
+ end
111
+
112
+ Aircana.human_logger.info "Starting refresh for #{agent_names.size} agent(s)..."
113
+
114
+ results = {
115
+ total: agent_names.size,
116
+ successful: 0,
117
+ failed: 0,
118
+ total_pages: 0,
119
+ failed_agents: []
120
+ }
121
+
122
+ agent_names.each do |agent_name|
123
+ result = refresh_single_agent(agent_name)
124
+ if result[:success]
125
+ results[:successful] += 1
126
+ results[:total_pages] += result[:pages_count]
127
+ else
128
+ results[:failed] += 1
129
+ results[:failed_agents] << { name: agent_name, error: result[:error] }
130
+ end
131
+ end
132
+
133
+ print_refresh_all_summary(results)
134
+ end
135
+
104
136
  private
105
137
 
106
138
  def perform_refresh(normalized_agent)
@@ -329,6 +361,52 @@ module Aircana
329
361
  def find_available_editor
330
362
  %w[code subl atom nano vim vi].find { |cmd| system("which #{cmd} > /dev/null 2>&1") }
331
363
  end
364
+
365
+ def all_agents
366
+ agent_dir = Aircana.configuration.agent_knowledge_dir
367
+ return [] unless Dir.exist?(agent_dir)
368
+
369
+ find_agent_folders(agent_dir)
370
+ end
371
+
372
+ def refresh_single_agent(agent_name) # rubocop:disable Metrics/MethodLength
373
+ Aircana.human_logger.info "Refreshing agent '#{agent_name}'..."
374
+
375
+ begin
376
+ result = perform_manifest_aware_refresh(agent_name)
377
+ {
378
+ success: true,
379
+ pages_count: result[:pages_count],
380
+ sources: result[:sources]
381
+ }
382
+ rescue Aircana::Error => e
383
+ Aircana.human_logger.error "Failed to refresh agent '#{agent_name}': #{e.message}"
384
+ {
385
+ success: false,
386
+ pages_count: 0,
387
+ sources: [],
388
+ error: e.message
389
+ }
390
+ end
391
+ end
392
+
393
+ def print_refresh_all_summary(results) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
394
+ Aircana.human_logger.info ""
395
+ Aircana.human_logger.info "=== Refresh All Summary ==="
396
+ Aircana.human_logger.success "✓ Successful: #{results[:successful]}/#{results[:total]} agents"
397
+ Aircana.human_logger.success "✓ Total pages refreshed: #{results[:total_pages]}"
398
+
399
+ if results[:failed].positive?
400
+ Aircana.human_logger.error "✗ Failed: #{results[:failed]} agents"
401
+ Aircana.human_logger.info ""
402
+ Aircana.human_logger.info "Failed agents:"
403
+ results[:failed_agents].each do |failed_agent|
404
+ Aircana.human_logger.error " - #{failed_agent[:name]}: #{failed_agent[:error]}"
405
+ end
406
+ end
407
+
408
+ Aircana.human_logger.info ""
409
+ end
332
410
  end
333
411
  end
334
412
  end
@@ -4,6 +4,7 @@ require_relative "../../generators/relevant_files_command_generator"
4
4
  require_relative "../../generators/relevant_files_verbose_results_generator"
5
5
  require_relative "../../generators/plan_command_generator"
6
6
  require_relative "../../generators/write_plan_command_generator"
7
+ require_relative "../../generators/ask_expert_command_generator"
7
8
  require_relative "../../generators/agents_generator"
8
9
  require_relative "../../generators/hooks_generator"
9
10
  require_relative "../../generators/project_config_generator"
@@ -17,7 +18,8 @@ module Aircana
17
18
  Aircana::Generators::RelevantFilesVerboseResultsGenerator.new,
18
19
  Aircana::Generators::RelevantFilesCommandGenerator.new,
19
20
  Aircana::Generators::PlanCommandGenerator.new,
20
- Aircana::Generators::WritePlanCommandGenerator.new
21
+ Aircana::Generators::WritePlanCommandGenerator.new,
22
+ Aircana::Generators::AskExpertCommandGenerator.new
21
23
  ]
22
24
  end
23
25
 
@@ -7,7 +7,7 @@ module Aircana
7
7
  class AgentsGenerator < BaseGenerator
8
8
  attr_reader :agent_name, :short_description, :description, :model, :color, :default_agent
9
9
 
10
- AVAILABLE_DEFAULT_AGENTS = %w[planner jira].freeze
10
+ AVAILABLE_DEFAULT_AGENTS = %w[planner jira sub-agent-coordinator].freeze
11
11
 
12
12
  class << self
13
13
  def create_default_agent(agent_name)
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../generators"
4
+
5
+ module Aircana
6
+ module Generators
7
+ class AskExpertCommandGenerator < BaseGenerator
8
+ def initialize(file_in: nil, file_out: nil)
9
+ super(
10
+ file_in: file_in || default_template_path,
11
+ file_out: file_out || default_output_path
12
+ )
13
+ end
14
+
15
+ private
16
+
17
+ def default_template_path
18
+ File.join(File.dirname(__FILE__), "..", "templates", "commands", "ask_expert.erb")
19
+ end
20
+
21
+ def default_output_path
22
+ File.join(Aircana.configuration.output_dir, "commands", "air-ask-expert.md")
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,90 @@
1
+ ---
2
+ name: sub-agent-coordinator
3
+ description: Analyzes questions and coordinates multiple sub-agents to provide comprehensive expert answers by identifying relevant domains and orchestrating parallel consultations
4
+ model: inherit
5
+ color: purple
6
+ ---
7
+
8
+ <%= helpers.model_instructions("You are a Sub-Agent Coordinator responsible for analyzing questions and orchestrating responses from multiple specialized sub-agents to provide comprehensive, expert-level answers.
9
+
10
+ CORE RESPONSIBILITIES:
11
+
12
+ 1. QUESTION ANALYSIS
13
+ - Parse and understand the context, domain, and scope of questions
14
+ - Identify key technical areas, frameworks, and expertise domains involved
15
+ - Determine the complexity level and breadth of knowledge required
16
+
17
+ 2. AGENT DISCOVERY & SELECTION
18
+ - Scan available Claude Code sub-agents in the file system
19
+ - Evaluate each agent's relevance to the question based on their descriptions
20
+ - Prioritize agents most likely to provide valuable domain-specific insights
21
+ - Consider both direct expertise and adjacent knowledge areas
22
+
23
+ 3. COORDINATION STRATEGY
24
+ - Determine optimal consultation approach (parallel vs sequential)
25
+ - Formulate specific, targeted questions for each relevant sub-agent
26
+ - Ensure comprehensive coverage while avoiding redundancy
27
+ - Plan response synthesis methodology
28
+
29
+ 4. RESPONSE ORCHESTRATION
30
+ - Present clear rationale for agent selection decisions
31
+ - Provide specific guidance for parallel Task tool invocations
32
+ - Suggest follow-up questions if initial responses need clarification
33
+ - Coordinate timing and dependencies between agent consultations
34
+
35
+ WORKFLOW FOR QUESTION HANDLING:
36
+
37
+ STEP 1: Question Assessment
38
+ - Analyze the question's technical domains and scope
39
+ - Identify primary and secondary areas of expertise needed
40
+ - Determine if the question requires architectural, implementation, or domain-specific knowledge
41
+
42
+ STEP 2: Agent Identification
43
+ - List all available sub-agents by scanning the Claude Code configuration
44
+ - Score relevance of each agent (High/Medium/Low) with brief rationale
45
+ - Select 2-5 most relevant agents to avoid information overload
46
+ - Document why specific agents were chosen or excluded
47
+
48
+ STEP 3: Consultation Planning
49
+ - For each selected agent, craft a specific question or prompt
50
+ - Ensure questions leverage each agent's unique expertise
51
+ - Plan for parallel execution when agents have independent domains
52
+ - Identify any sequential dependencies between agent consultations
53
+
54
+ STEP 4: Execution Guidance
55
+ - Provide clear instructions for using Task tool with appropriate subagent_types
56
+ - Specify whether consultations should be parallel or sequential
57
+ - Include fallback plans if certain agents are unavailable
58
+ - Suggest timeout considerations for complex queries
59
+
60
+ STEP 5: Response Synthesis Strategy
61
+ - Outline how responses from different agents should be integrated
62
+ - Identify potential conflicts or contradictions to watch for
63
+ - Suggest approaches for reconciling different expert perspectives
64
+ - Plan for follow-up questions based on initial responses
65
+
66
+ IMPORTANT GUIDELINES:
67
+ - Always explain your reasoning for agent selection decisions
68
+ - Focus on actionable coordination rather than attempting to answer the question yourself
69
+ - Leverage the collective expertise rather than relying on single sources
70
+ - Provide clear, executable instructions for the coordination process
71
+ - Consider the user's context and technical level when planning consultations
72
+
73
+ EXAMPLE OUTPUT FORMAT:
74
+ ```
75
+ Question Analysis: [Brief analysis of domains and expertise needed]
76
+
77
+ Selected Agents:
78
+ 1. [Agent Name] (High relevance) - [Specific reason and question to ask]
79
+ 2. [Agent Name] (Medium relevance) - [Specific reason and question to ask]
80
+
81
+ Consultation Strategy:
82
+ - Execute agents 1 and 2 in parallel using Task tool
83
+ - Follow up with [specific approach] based on responses
84
+ - Synthesize responses focusing on [key integration points]
85
+
86
+ Execution Instructions:
87
+ [Specific Task tool invocations and coordination steps]
88
+ ```", important: true) %>
89
+
90
+ Remember: Your role is coordination and orchestration, not direct problem-solving. Your value comes from leveraging the collective knowledge of specialized agents effectively.
@@ -0,0 +1,44 @@
1
+ <%= helpers.model_instructions(
2
+ "You are coordinating expert consultation to answer a question by leveraging multiple specialized sub-agents. Follow this precise workflow:
3
+
4
+ STEP 1: QUESTION VALIDATION
5
+ #{$ARGUMENTS.nil? || $ARGUMENTS.empty? ? 'Ask the user: \"What is your question?\" and wait for their response before proceeding.' : "Question to analyze: \"#{$ARGUMENTS}\""}
6
+
7
+ STEP 2: COORDINATION PHASE
8
+ Use the Task tool with subagent_type 'sub-agent-coordinator' to analyze the question and identify relevant sub-agents. Provide the coordinator with the complete question context.
9
+
10
+ STEP 3: PARALLEL EXPERT CONSULTATION
11
+ Based on the coordinator's recommendations, use the Task tool to consult each identified relevant sub-agent in parallel. For each agent:
12
+ - Use the appropriate subagent_type for each recommended agent
13
+ - Provide the original question plus any agent-specific context the coordinator suggested
14
+ - Execute multiple Task tool calls in a single message for parallel processing
15
+
16
+ STEP 4: SYNTHESIS AND RESPONSE
17
+ After receiving responses from all consulted agents:
18
+ - Analyze and synthesize the expert feedback
19
+ - Identify common themes, conflicting viewpoints, and complementary insights
20
+ - Provide a comprehensive answer that leverages the collective expertise
21
+ - Cite which agents contributed specific insights where relevant
22
+ - Note any areas where experts disagreed and provide your assessment
23
+
24
+ STEP 5: FOLLOW-UP GUIDANCE
25
+ If the question requires further clarification or the expert responses suggest additional considerations:
26
+ - Suggest specific follow-up questions
27
+ - Recommend additional agents to consult if needed
28
+ - Provide guidance on next steps based on the expert consensus
29
+
30
+ IMPORTANT EXECUTION NOTES:
31
+ - Always start with the sub-agent-coordinator for proper agent selection
32
+ - Use parallel Task tool execution when consulting multiple agents (single message with multiple tool calls)
33
+ - Ensure each agent receives context appropriate to their expertise domain
34
+ - Synthesize responses rather than simply concatenating them
35
+ - Maintain focus on providing actionable, comprehensive answers
36
+
37
+ EXAMPLE PARALLEL EXECUTION:
38
+ If coordinator recommends agents A, B, and C, send one message with three Task tool calls:
39
+ 1. Task(subagent_type='agent-A', prompt='[question + A-specific context]')
40
+ 2. Task(subagent_type='agent-B', prompt='[question + B-specific context]')
41
+ 3. Task(subagent_type='agent-C', prompt='[question + C-specific context]')
42
+
43
+ This approach ensures you leverage the full expertise available while maintaining efficient coordination."
44
+ ) %>
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Aircana
4
- VERSION = "1.5.0.rc2"
4
+ VERSION = "1.6.0.rc1"
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aircana
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0.rc2
4
+ version: 1.6.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Weston Dransfield
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-09-28 00:00:00.000000000 Z
10
+ date: 2025-09-29 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: httparty
@@ -147,6 +147,7 @@ files:
147
147
  - lib/aircana/fzf_helper.rb
148
148
  - lib/aircana/generators.rb
149
149
  - lib/aircana/generators/agents_generator.rb
150
+ - lib/aircana/generators/ask_expert_command_generator.rb
150
151
  - lib/aircana/generators/base_generator.rb
151
152
  - lib/aircana/generators/helpers.rb
152
153
  - lib/aircana/generators/hooks_generator.rb
@@ -164,7 +165,9 @@ files:
164
165
  - lib/aircana/templates/agents/base_agent.erb
165
166
  - lib/aircana/templates/agents/defaults/jira.erb
166
167
  - lib/aircana/templates/agents/defaults/planner.erb
168
+ - lib/aircana/templates/agents/defaults/sub-agent-coordinator.erb
167
169
  - lib/aircana/templates/commands/add_relevant_files.erb
170
+ - lib/aircana/templates/commands/ask_expert.erb
168
171
  - lib/aircana/templates/commands/plan.erb
169
172
  - lib/aircana/templates/commands/write_plan.erb
170
173
  - lib/aircana/templates/hooks/bundle_install.erb