aircana 1.5.0 → 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 +4 -4
- data/.rspec_status +187 -182
- data/CLAUDE.md +1 -0
- data/README.md +91 -73
- data/lib/aircana/cli/app.rb +5 -0
- data/lib/aircana/cli/commands/agents.rb +78 -0
- data/lib/aircana/cli/commands/generate.rb +3 -1
- data/lib/aircana/generators/agents_generator.rb +1 -1
- data/lib/aircana/generators/ask_expert_command_generator.rb +26 -0
- data/lib/aircana/templates/agents/defaults/sub-agent-coordinator.erb +90 -0
- data/lib/aircana/templates/commands/ask_expert.erb +44 -0
- data/lib/aircana/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4006fbfc36508d8914fb2af96e39cc3bf031d8a689f969e2de31974fcb39a944
|
4
|
+
data.tar.gz: cfe76006f2f678c063b934cb22d35059bce1759aa9e7fbe3fc92cd0c79848179
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
4
|
-
./spec/aircana/cli/commands/add_directory_spec.rb[1:1:2:1] | passed | 0.
|
5
|
-
./spec/aircana/cli/commands/add_directory_spec.rb[1:1:3:1] | passed | 0.
|
6
|
-
./spec/aircana/cli/commands/add_directory_spec.rb[1:1:4:1] | passed | 0.
|
7
|
-
./spec/aircana/cli/commands/add_directory_spec.rb[1:1:4:2:1] | passed | 0.
|
8
|
-
./spec/aircana/cli/commands/add_directory_spec.rb[1:1:5:1] | passed | 0.
|
9
|
-
./spec/aircana/cli/commands/add_directory_spec.rb[1:2:1] | passed | 0.
|
10
|
-
./spec/aircana/cli/commands/add_directory_spec.rb[1:2:2] | passed | 0.
|
11
|
-
./spec/aircana/cli/commands/add_directory_spec.rb[1:3:1] | passed | 0.
|
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.
|
14
|
-
./spec/aircana/cli/commands/add_directory_spec.rb[1:3:4] | passed | 0.
|
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.
|
17
|
-
./spec/aircana/cli/commands/add_directory_spec.rb[1:3:7] | passed | 0.
|
18
|
-
./spec/aircana/cli/commands/add_directory_spec.rb[1:3:8] | passed | 0.
|
19
|
-
./spec/aircana/cli/commands/agents_spec.rb[1:1:1:1] | passed | 0.
|
20
|
-
./spec/aircana/cli/commands/agents_spec.rb[1:1:1:2] | passed | 0.
|
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.
|
23
|
-
./spec/aircana/cli/commands/agents_spec.rb[1:1:3:1] | passed | 0.
|
24
|
-
./spec/aircana/cli/commands/agents_spec.rb[1:1:3:2] | passed | 0.
|
25
|
-
./spec/aircana/cli/commands/agents_spec.rb[1:2:1:1] | passed | 0.
|
26
|
-
./spec/aircana/cli/commands/agents_spec.rb[1:2:1:2] | passed | 0.
|
27
|
-
./spec/aircana/cli/commands/agents_spec.rb[1:2:1:3:1] | passed | 0.
|
28
|
-
./spec/aircana/cli/commands/agents_spec.rb[1:2:2:1] | passed | 0.
|
29
|
-
./spec/aircana/cli/commands/agents_spec.rb[1:2:3:1] | passed | 0.
|
30
|
-
./spec/aircana/cli/commands/agents_spec.rb[1:2:4:1] | passed | 0.
|
31
|
-
./spec/aircana/cli/commands/agents_spec.rb[1:3:1] | passed | 0.
|
32
|
-
./spec/aircana/cli/commands/agents_spec.rb[1:3:2] | passed | 0.
|
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.
|
35
|
-
./spec/aircana/cli/commands/
|
36
|
-
./spec/aircana/cli/commands/
|
37
|
-
./spec/aircana/cli/commands/
|
38
|
-
./spec/aircana/cli/commands/
|
39
|
-
./spec/aircana/cli/commands/
|
40
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:
|
41
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:
|
42
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:
|
43
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:
|
44
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:
|
45
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:
|
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.
|
48
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:6:1:1] | passed | 0.
|
49
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:6:2:1] | passed | 0.
|
50
|
-
./spec/aircana/cli/commands/hooks_spec.rb[1:7:1] | passed | 0.
|
51
|
-
./spec/aircana/cli/commands/install_spec.rb[1:1:1] | passed | 0.
|
52
|
-
./spec/aircana/cli/commands/install_spec.rb[1:1:2] | passed | 0.
|
53
|
-
./spec/aircana/cli/commands/install_spec.rb[1:2:1:1] | passed | 0.
|
54
|
-
./spec/aircana/cli/commands/install_spec.rb[1:2:2:1] | passed | 0.
|
55
|
-
./spec/aircana/cli/commands/install_spec.rb[1:2:3:1] | passed | 0.
|
56
|
-
./spec/aircana/cli/commands/install_spec.rb[1:2:4:1] | passed | 0.
|
57
|
-
./spec/aircana/cli/commands/install_spec.rb[1:3:1] | passed | 0.
|
58
|
-
./spec/aircana/cli/commands/install_spec.rb[1:3:2:1] | passed | 0.
|
59
|
-
./spec/aircana/cli/commands/install_spec.rb[1:3:3:1] | passed | 0.
|
60
|
-
./spec/aircana/cli/commands/install_spec.rb[1:3:4:1] | passed | 0.
|
61
|
-
./spec/aircana/cli/commands/install_spec.rb[1:4:1] | passed | 0.
|
62
|
-
./spec/aircana/cli/commands/install_spec.rb[1:4:2] | passed | 0.
|
63
|
-
./spec/aircana/cli/commands/install_spec.rb[1:4:3] | passed | 0.
|
64
|
-
./spec/aircana/cli/commands/install_spec.rb[1:4:4] | passed | 0.
|
65
|
-
./spec/aircana/cli/commands/install_spec.rb[1:4:5] | passed | 0.
|
66
|
-
./spec/aircana/cli/commands/install_spec.rb[1:5:1:1] | passed | 0.
|
67
|
-
./spec/aircana/cli/commands/install_spec.rb[1:5:2:1] | passed | 0.
|
68
|
-
./spec/aircana/cli/commands/install_spec.rb[1:5:3:1] | passed | 0.
|
69
|
-
./spec/aircana/cli/commands/install_spec.rb[1:6:1] | passed | 0.
|
70
|
-
./spec/aircana/configuration_spec.rb[1:1:1] | passed | 0.
|
71
|
-
./spec/aircana/configuration_spec.rb[1:2:1] | passed | 0.
|
72
|
-
./spec/aircana/configuration_spec.rb[1:3:1] | passed | 0.
|
73
|
-
./spec/aircana/configuration_spec.rb[1:4:1] | passed | 0.
|
74
|
-
./spec/aircana/configuration_spec.rb[1:5:1] | passed | 0.
|
75
|
-
./spec/aircana/configuration_spec.rb[1:5:2] | passed | 0.
|
76
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:1:1] | passed | 0.
|
77
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:1:2] | passed | 0.
|
78
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:1:3] | passed | 0.
|
79
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:2:1] | passed | 0.
|
80
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:2:2] | passed | 0.
|
81
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:2:3] | passed | 0.
|
82
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:3:1] | passed | 0.
|
83
|
-
./spec/aircana/contexts/confluence_spec.rb[1:1:3:2] | passed | 0.
|
84
|
-
./spec/aircana/contexts/local_spec.rb[1:1:1] | passed | 0.
|
85
|
-
./spec/aircana/contexts/local_spec.rb[1:1:2] | passed | 0.
|
86
|
-
./spec/aircana/contexts/local_spec.rb[1:1:3] | passed | 0.
|
87
|
-
./spec/aircana/contexts/local_spec.rb[1:1:4] | passed | 0.
|
88
|
-
./spec/aircana/contexts/local_spec.rb[1:1:5] | passed | 0.
|
89
|
-
./spec/aircana/contexts/local_spec.rb[1:1:6] | passed | 0.
|
90
|
-
./spec/aircana/contexts/local_spec.rb[1:1:7] | passed | 0.
|
91
|
-
./spec/aircana/contexts/local_spec.rb[1:1:8] | passed | 0.
|
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.
|
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.
|
96
|
-
./spec/aircana/contexts/manifest_spec.rb[1:3:1] | passed | 0.
|
97
|
-
./spec/aircana/contexts/manifest_spec.rb[1:3:2] | passed | 0.
|
98
|
-
./spec/aircana/contexts/manifest_spec.rb[1:3:3] | passed | 0.
|
99
|
-
./spec/aircana/contexts/manifest_spec.rb[1:3:4] | passed | 0.
|
100
|
-
./spec/aircana/contexts/manifest_spec.rb[1:4:1] | passed | 0.
|
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.
|
103
|
-
./spec/aircana/contexts/manifest_spec.rb[1:5:2] | passed | 0.
|
104
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:1] | passed | 0.
|
105
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:2] | passed | 0.
|
106
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:3] | passed | 0.
|
107
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:4] | passed | 0.
|
108
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:5] | passed | 0.
|
109
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:6] | passed | 0.
|
110
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:7] | passed | 0.
|
111
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:8] | passed | 0.
|
112
|
-
./spec/aircana/contexts/manifest_spec.rb[1:6:9] | passed | 0.
|
113
|
-
./spec/aircana/contexts/web_spec.rb[1:1:1] | passed | 0.
|
114
|
-
./spec/aircana/contexts/web_spec.rb[1:2:1] | passed | 0.
|
115
|
-
./spec/aircana/contexts/web_spec.rb[1:3:1:1] | passed | 0.
|
116
|
-
./spec/aircana/contexts/web_spec.rb[1:3:1:2] | passed | 0.
|
117
|
-
./spec/aircana/contexts/web_spec.rb[1:3:1:3] | passed | 0.
|
118
|
-
./spec/aircana/contexts/web_spec.rb[1:3:2:1] | passed | 0.
|
119
|
-
./spec/aircana/contexts/web_spec.rb[1:3:2:2] | passed | 0.
|
120
|
-
./spec/aircana/contexts/web_spec.rb[1:3:3:1] | passed | 0.
|
121
|
-
./spec/aircana/contexts/web_spec.rb[1:3:3:2] | passed | 0.
|
122
|
-
./spec/aircana/contexts/web_spec.rb[1:3:3:3] | passed | 0.
|
123
|
-
./spec/aircana/contexts/web_spec.rb[1:3:3:4] | passed | 0.
|
124
|
-
./spec/aircana/contexts/web_spec.rb[1:3:3:5] | passed | 0.
|
125
|
-
./spec/aircana/contexts/web_spec.rb[1:3:4:1] | passed | 0.
|
126
|
-
./spec/aircana/contexts/web_spec.rb[1:3:4:2] | passed | 0.
|
127
|
-
./spec/aircana/contexts/web_spec.rb[1:3:4:3] | passed | 0.
|
128
|
-
./spec/aircana/contexts/web_spec.rb[1:3:5:1] | passed | 0.
|
129
|
-
./spec/aircana/contexts/web_spec.rb[1:3:5:2] | passed | 0.
|
130
|
-
./spec/aircana/contexts/web_spec.rb[1:3:5:3] | passed | 0.
|
131
|
-
./spec/aircana/contexts/web_spec.rb[1:3:6:1] | passed | 0.
|
132
|
-
./spec/aircana/contexts/web_spec.rb[1:3:6:2] | passed | 0.
|
133
|
-
./spec/aircana/contexts/web_spec.rb[1:3:6:3] | passed | 0.
|
134
|
-
./spec/aircana/contexts/web_spec.rb[1:3:7:1] | passed | 0.
|
135
|
-
./spec/aircana/contexts/web_spec.rb[1:3:7:2] | passed | 0.
|
136
|
-
./spec/aircana/fzf_helper_spec.rb[1:1:1:1] | passed | 0.
|
137
|
-
./spec/aircana/fzf_helper_spec.rb[1:1:1:2] | passed | 0.
|
138
|
-
./spec/aircana/fzf_helper_spec.rb[1:1:1:3] | passed | 0.
|
139
|
-
./spec/aircana/fzf_helper_spec.rb[1:1:2:1] | passed | 0.
|
140
|
-
./spec/aircana/fzf_helper_spec.rb[1:1:3:1] | passed | 0.
|
141
|
-
./spec/aircana/fzf_helper_spec.rb[1:2:1:1] | passed | 0.
|
142
|
-
./spec/aircana/fzf_helper_spec.rb[1:2:1:2] | passed | 0.
|
143
|
-
./spec/aircana/fzf_helper_spec.rb[1:2:1:3] | passed | 0.
|
144
|
-
./spec/aircana/fzf_helper_spec.rb[1:2:2:1] | passed | 0.
|
145
|
-
./spec/aircana/fzf_helper_spec.rb[1:2:2:2] | passed | 0.
|
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.
|
148
|
-
./spec/aircana/generators/agents_generator_spec.rb[1:3:1:1] | passed | 0.
|
149
|
-
./spec/aircana/generators/agents_generator_spec.rb[1:3:1:2] | passed | 0.
|
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.
|
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.
|
155
|
-
./spec/aircana/generators/hooks_generator_spec.rb[1:4:1] | passed | 0.
|
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.
|
158
|
-
./spec/aircana/generators/hooks_generator_spec.rb[1:6:1] | passed | 0.
|
159
|
-
./spec/aircana/generators/hooks_generator_spec.rb[1:7:1] | passed | 0.
|
160
|
-
./spec/aircana/generators/plan_command_generator_spec.rb[1:1:1] | passed | 0.
|
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.
|
163
|
-
./spec/aircana/generators/plan_command_generator_spec.rb[1:2:1] | passed | 0.
|
164
|
-
./spec/aircana/generators/plan_command_generator_spec.rb[1:2:2] | passed | 0.
|
165
|
-
./spec/aircana/generators/write_plan_command_generator_spec.rb[1:1:1] | passed | 0.
|
166
|
-
./spec/aircana/generators/write_plan_command_generator_spec.rb[1:2:1] | passed | 0.
|
167
|
-
./spec/aircana/generators/write_plan_command_generator_spec.rb[1:2:2] | passed | 0.
|
168
|
-
./spec/aircana/human_logger_spec.rb[1:1:1] | passed | 0.
|
169
|
-
./spec/aircana/human_logger_spec.rb[1:2:1] | passed | 0.
|
170
|
-
./spec/aircana/human_logger_spec.rb[1:3:1] | passed | 0.
|
171
|
-
./spec/aircana/human_logger_spec.rb[1:4:1] | passed | 0.
|
172
|
-
./spec/aircana/human_logger_spec.rb[1:5:1] | passed | 0.
|
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.
|
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.
|
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.
|
179
|
-
./spec/aircana/human_logger_spec.rb[1:6:1] | passed | 0.
|
180
|
-
./spec/aircana/llm/claude_client_spec.rb[1:1:1:1] | passed | 0.
|
181
|
-
./spec/aircana/llm/claude_client_spec.rb[1:1:1:2] | passed | 0.
|
182
|
-
./spec/aircana/llm/claude_client_spec.rb[1:1:1:3] | passed | 0.
|
183
|
-
./spec/aircana/llm/claude_client_spec.rb[1:1:1:4] | passed | 0.
|
184
|
-
./spec/aircana/llm/claude_client_spec.rb[1:1:2:1] | passed | 0.
|
185
|
-
./spec/aircana/llm/claude_client_spec.rb[1:1:2:2] | passed | 0.
|
186
|
-
./spec/aircana/llm/claude_client_spec.rb[1:1:3:1] | passed | 0.
|
187
|
-
./spec/aircana/llm/claude_client_spec.rb[1:2:1] | passed | 0.
|
188
|
-
./spec/aircana/llm/claude_client_spec.rb[1:2:2] | passed | 0.
|
189
|
-
./spec/aircana/llm/claude_client_spec.rb[1:3:1:1] | passed | 0.
|
190
|
-
./spec/aircana/llm/claude_client_spec.rb[1:3:1:2] | passed | 0.
|
191
|
-
./spec/aircana/system_checker_spec.rb[1:1:1:1] | passed | 0.
|
192
|
-
./spec/aircana/system_checker_spec.rb[1:1:2:1] | passed | 0.
|
193
|
-
./spec/aircana/system_checker_spec.rb[1:1:3:1] | passed | 0.
|
194
|
-
./spec/aircana/system_checker_spec.rb[1:2:1] | passed | 0.
|
195
|
-
./spec/aircana/system_checker_spec.rb[1:2:2] | passed | 0.
|
196
|
-
./spec/aircana/system_checker_spec.rb[1:3:1] | passed | 0.
|
197
|
-
./spec/aircana/system_checker_spec.rb[1:3:2] | passed | 0.
|
198
|
-
./spec/aircana/system_checker_spec.rb[1:3:3] | passed | 0.
|
199
|
-
./spec/aircana/system_checker_spec.rb[1:3:4] | passed | 0.
|
200
|
-
./spec/aircana/system_checker_spec.rb[1:3:5] | passed | 0.
|
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.
|
207
|
+
./spec/aircana_spec.rb[1:2] | passed | 0.00082 seconds |
|
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
|
[](https://github.com/westonkd/aircana/actions/workflows/main.yml)
|
6
4
|
[](https://badge.fury.io/rb/aircana)
|
7
5
|
|
8
|
-
##
|
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
|
-
|
32
|
+
Verify installation and dependency setup:
|
17
33
|
|
18
|
-
```
|
19
|
-
|
34
|
+
```bash
|
35
|
+
aircana doctor
|
20
36
|
```
|
21
37
|
|
22
|
-
|
38
|
+
Install Aircana files into your repo:
|
23
39
|
|
24
40
|
```bash
|
25
|
-
|
41
|
+
cd ~/my/repo
|
42
|
+
aircana install # This is a no-op if the repo already uses .aircana
|
26
43
|
```
|
27
44
|
|
28
|
-
|
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
|
50
|
+
aircana agents refresh-all
|
32
51
|
```
|
33
52
|
|
34
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
46
|
-
- Access to a Confluence instance
|
47
|
-
- Confluence API token
|
48
|
-
- Appropriate permissions to read pages and labels
|
65
|
+
## Key Concepts
|
49
66
|
|
50
|
-
|
67
|
+
### Subagents
|
51
68
|
|
52
|
-
|
69
|
+
Subagents are domain-specific agents to whom the primary Claude Code agent can delegate tasks and questions.
|
53
70
|
|
54
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
113
|
+
In many cases, adding the actual knowledge base to version control is undesirable because:
|
66
114
|
|
67
|
-
|
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
|
-
|
117
|
+
Knowledge bases may contain sensitive information that should not be public in an open-source project.
|
74
118
|
|
75
|
-
|
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
|
-
|
121
|
+
### Consistent Artifacts
|
82
122
|
|
83
|
-
|
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
|
-
|
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
|
-
|
97
|
-
```bash
|
98
|
-
aircana files add # Interactive selection
|
99
|
-
```
|
127
|
+
### SQS Integration (Slack Integration at Instructure)
|
100
128
|
|
101
|
-
|
102
|
-
```
|
103
|
-
/add-relevant-files
|
104
|
-
```
|
129
|
+
Aircana uses the "Notification" Claude Code hook to send messages to SQS.
|
105
130
|
|
106
|
-
|
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
|
-
|
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
|
|
data/lib/aircana/cli/app.rb
CHANGED
@@ -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
|
+
) %>
|
data/lib/aircana/version.rb
CHANGED
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.
|
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-
|
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
|