aircana 5.0.0.rc1 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 56aa80e6299f88b4d0ec36a6710c5a2ff940216cbf6fc3267f48700ba0df03c6
4
- data.tar.gz: '0185a6d4042c5fec5228d607cb2383110dc19e4120d4df776ddfea82990aa37b'
3
+ metadata.gz: 55807d6edd89694032c820749a8dc71dfdbd0917afe1b73edda46945cb46b9fc
4
+ data.tar.gz: ea1a40792d07da18d7fc9562a0055c667b7ab049d7b422f5cd9d9adef0723b43
5
5
  SHA512:
6
- metadata.gz: a3d7ec2bb692386b0e0a15a60b3d93bd26fed9d4d6dfd4d7e8df560dc5f0fba056f0136542ce37fa6ae2243709cedaca287de1ade8f4afcea208c559d2a54bb9
7
- data.tar.gz: 72d3002dfd68809400596e5076d644158016fd727ed6b90879621aebcf25b8f81df384938995f387963da881deacc60a0c25810ac350d90df5cc08304f8a5430
6
+ metadata.gz: 4d35849874537a3aeb859aaca83bc0cab8788db03adcabe98c514a3c53dc6995599a135fbf8b374779386d4b24692cf37a20e1802480a96e390364e482945021
7
+ data.tar.gz: aa6ccabe36cf741a2d5a2783a61eabc079941d85301fc7afc46c57531bf6d215584f630ccf1a84ff698463724fced8b985ec93a22edb3f21401842b000a74c69
data/.rspec_status CHANGED
@@ -1,84 +1,90 @@
1
1
  example_id | status | run_time |
2
2
  --------------------------------------------------------------- | ------ | --------------- |
3
- ./spec/aircana/cli/commands/init_spec.rb[1:1:1] | passed | 0.01134 seconds |
4
- ./spec/aircana/cli/commands/init_spec.rb[1:1:2] | passed | 0.01148 seconds |
5
- ./spec/aircana/cli/commands/init_spec.rb[1:2:1:1] | passed | 0.00542 seconds |
6
- ./spec/aircana/cli/commands/init_spec.rb[1:3:1] | passed | 0.00345 seconds |
7
- ./spec/aircana/cli/commands/init_spec.rb[1:3:2:1] | passed | 0.00312 seconds |
8
- ./spec/aircana/cli/commands/init_spec.rb[1:3:3:1] | passed | 0.00374 seconds |
9
- ./spec/aircana/cli/commands/init_spec.rb[1:3:4:1] | passed | 0.00369 seconds |
10
- ./spec/aircana/cli/commands/init_spec.rb[1:4:1] | passed | 0.00153 seconds |
11
- ./spec/aircana/cli/commands/init_spec.rb[1:4:2] | passed | 0.00187 seconds |
12
- ./spec/aircana/cli/commands/init_spec.rb[1:4:3] | passed | 0.00148 seconds |
3
+ ./spec/aircana/cli/commands/init_spec.rb[1:1:1] | passed | 0.01462 seconds |
4
+ ./spec/aircana/cli/commands/init_spec.rb[1:1:2] | passed | 0.00385 seconds |
5
+ ./spec/aircana/cli/commands/init_spec.rb[1:2:1:1] | passed | 0.00515 seconds |
6
+ ./spec/aircana/cli/commands/init_spec.rb[1:3:1] | passed | 0.00472 seconds |
7
+ ./spec/aircana/cli/commands/init_spec.rb[1:3:2:1] | passed | 0.00301 seconds |
8
+ ./spec/aircana/cli/commands/init_spec.rb[1:3:3:1] | passed | 0.00347 seconds |
9
+ ./spec/aircana/cli/commands/init_spec.rb[1:3:4:1] | passed | 0.00381 seconds |
10
+ ./spec/aircana/cli/commands/init_spec.rb[1:4:1] | passed | 0.00159 seconds |
11
+ ./spec/aircana/cli/commands/init_spec.rb[1:4:2] | passed | 0.00169 seconds |
12
+ ./spec/aircana/cli/commands/init_spec.rb[1:4:3] | passed | 0.00154 seconds |
13
13
  ./spec/aircana/cli/commands/init_spec.rb[1:4:4] | passed | 0.00142 seconds |
14
- ./spec/aircana/cli/commands/init_spec.rb[1:4:5] | passed | 0.00172 seconds |
15
- ./spec/aircana/cli/commands/init_spec.rb[1:5:1] | passed | 0.0032 seconds |
16
- ./spec/aircana/cli/commands/init_spec.rb[1:5:2] | passed | 0.00419 seconds |
17
- ./spec/aircana/cli/commands/init_spec.rb[1:5:3] | passed | 0.00522 seconds |
18
- ./spec/aircana/cli/commands/init_spec.rb[1:5:4] | passed | 0.00482 seconds |
19
- ./spec/aircana/cli/commands/kb_spec.rb[1:1:1:1] | passed | 0.00045 seconds |
20
- ./spec/aircana/cli/commands/kb_spec.rb[1:1:2:1] | passed | 0.00228 seconds |
21
- ./spec/aircana/cli/commands/kb_spec.rb[1:2:1] | passed | 0.00199 seconds |
22
- ./spec/aircana/cli/commands/kb_spec.rb[1:3:1] | passed | 0.00214 seconds |
23
- ./spec/aircana/cli/commands/kb_spec.rb[1:3:2] | passed | 0.00183 seconds |
24
- ./spec/aircana/cli/commands/kb_spec.rb[1:4:1:1] | passed | 0.00034 seconds |
25
- ./spec/aircana/cli/commands/kb_spec.rb[1:4:2:1] | passed | 0.00145 seconds |
26
- ./spec/aircana/cli/commands/kb_spec.rb[1:5:1:1] | passed | 0.00069 seconds |
14
+ ./spec/aircana/cli/commands/init_spec.rb[1:4:5] | passed | 0.00121 seconds |
15
+ ./spec/aircana/cli/commands/init_spec.rb[1:5:1] | passed | 0.003 seconds |
16
+ ./spec/aircana/cli/commands/init_spec.rb[1:5:2] | passed | 0.00426 seconds |
17
+ ./spec/aircana/cli/commands/init_spec.rb[1:5:3] | passed | 0.00504 seconds |
18
+ ./spec/aircana/cli/commands/init_spec.rb[1:5:4] | passed | 0.00661 seconds |
19
+ ./spec/aircana/cli/commands/kb_spec.rb[1:1:1:1] | passed | 0.0004 seconds |
20
+ ./spec/aircana/cli/commands/kb_spec.rb[1:1:2:1] | passed | 0.00183 seconds |
21
+ ./spec/aircana/cli/commands/kb_spec.rb[1:2:1] | passed | 0.00165 seconds |
22
+ ./spec/aircana/cli/commands/kb_spec.rb[1:3:1] | passed | 0.00226 seconds |
23
+ ./spec/aircana/cli/commands/kb_spec.rb[1:3:2] | passed | 0.00164 seconds |
24
+ ./spec/aircana/cli/commands/kb_spec.rb[1:4:1:1] | passed | 0.00027 seconds |
25
+ ./spec/aircana/cli/commands/kb_spec.rb[1:4:2:1] | passed | 0.0015 seconds |
26
+ ./spec/aircana/cli/commands/kb_spec.rb[1:5:1:1] | passed | 0.00063 seconds |
27
27
  ./spec/aircana/cli/commands/kb_spec.rb[1:5:1:2] | passed | 0.00019 seconds |
28
- ./spec/aircana/cli/commands/kb_spec.rb[1:5:2:1] | passed | 0.00017 seconds |
29
- ./spec/aircana/cli/commands/kb_spec.rb[1:5:2:2] | passed | 0.00396 seconds |
30
- ./spec/aircana/cli/commands/kb_spec.rb[1:5:2:3] | passed | 0.00097 seconds |
31
- ./spec/aircana/configuration_spec.rb[1:1:1] | passed | 0.00019 seconds |
32
- ./spec/aircana/configuration_spec.rb[1:2:1] | passed | 0.00009 seconds |
28
+ ./spec/aircana/cli/commands/kb_spec.rb[1:5:2:1] | passed | 0.00018 seconds |
29
+ ./spec/aircana/cli/commands/kb_spec.rb[1:5:2:2] | passed | 0.00178 seconds |
30
+ ./spec/aircana/cli/commands/kb_spec.rb[1:5:2:3] | passed | 0.00087 seconds |
31
+ ./spec/aircana/configuration_spec.rb[1:1:1] | passed | 0.00017 seconds |
32
+ ./spec/aircana/configuration_spec.rb[1:2:1] | passed | 0.00008 seconds |
33
33
  ./spec/aircana/configuration_spec.rb[1:3:1] | passed | 0.00007 seconds |
34
- ./spec/aircana/configuration_spec.rb[1:4:1] | passed | 0.00008 seconds |
35
- ./spec/aircana/configuration_spec.rb[1:5:1] | passed | 0.00008 seconds |
36
- ./spec/aircana/configuration_spec.rb[1:6:1] | passed | 0.00008 seconds |
34
+ ./spec/aircana/configuration_spec.rb[1:4:1] | passed | 0.00007 seconds |
35
+ ./spec/aircana/configuration_spec.rb[1:5:1] | passed | 0.00007 seconds |
36
+ ./spec/aircana/configuration_spec.rb[1:6:1] | passed | 0.00007 seconds |
37
37
  ./spec/aircana/configuration_spec.rb[1:6:2] | passed | 0.00007 seconds |
38
- ./spec/aircana/configuration_spec.rb[1:7:1:1] | passed | 0.00049 seconds |
39
- ./spec/aircana/configuration_spec.rb[1:7:2:1] | passed | 0.00019 seconds |
40
- ./spec/aircana/configuration_spec.rb[1:7:3:1] | passed | 0.00019 seconds |
41
- ./spec/aircana/configuration_spec.rb[1:7:4:1] | passed | 0.00009 seconds |
42
- ./spec/aircana/contexts/confluence_spec.rb[1:1:1:1] | passed | 0.0027 seconds |
43
- ./spec/aircana/contexts/confluence_spec.rb[1:1:1:2] | passed | 0.0006 seconds |
44
- ./spec/aircana/contexts/confluence_spec.rb[1:1:1:3] | passed | 0.0013 seconds |
45
- ./spec/aircana/contexts/confluence_spec.rb[1:1:2:1] | passed | 0.00024 seconds |
46
- ./spec/aircana/contexts/confluence_spec.rb[1:1:2:2] | passed | 0.00021 seconds |
47
- ./spec/aircana/contexts/confluence_spec.rb[1:1:2:3] | passed | 0.00036 seconds |
48
- ./spec/aircana/contexts/confluence_spec.rb[1:1:3:1] | passed | 0.00041 seconds |
49
- ./spec/aircana/contexts/confluence_spec.rb[1:1:3:2] | passed | 0.0004 seconds |
38
+ ./spec/aircana/configuration_spec.rb[1:7:1] | passed | 0.00007 seconds |
39
+ ./spec/aircana/configuration_spec.rb[1:7:2] | passed | 0.00007 seconds |
40
+ ./spec/aircana/configuration_spec.rb[1:7:3] | passed | 0.00008 seconds |
41
+ ./spec/aircana/configuration_spec.rb[1:7:4] | passed | 0.00009 seconds |
42
+ ./spec/aircana/configuration_spec.rb[1:7:5] | passed | 0.00007 seconds |
43
+ ./spec/aircana/configuration_spec.rb[1:7:6] | passed | 0.00006 seconds |
44
+ ./spec/aircana/configuration_spec.rb[1:8:1:1] | passed | 0.00023 seconds |
45
+ ./spec/aircana/configuration_spec.rb[1:8:2:1] | passed | 0.00021 seconds |
46
+ ./spec/aircana/configuration_spec.rb[1:8:3:1] | passed | 0.0002 seconds |
47
+ ./spec/aircana/configuration_spec.rb[1:8:4:1] | passed | 0.00009 seconds |
48
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:1:1] | passed | 0.00271 seconds |
49
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:1:2] | passed | 0.00061 seconds |
50
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:1:3] | passed | 0.00116 seconds |
51
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:2:1] | passed | 0.00025 seconds |
52
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:2:2] | passed | 0.00019 seconds |
53
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:2:3] | passed | 0.00019 seconds |
54
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:3:1] | passed | 0.00058 seconds |
55
+ ./spec/aircana/contexts/confluence_spec.rb[1:1:3:2] | passed | 0.00056 seconds |
50
56
  ./spec/aircana/contexts/local_spec.rb[1:1:1] | passed | 0.00061 seconds |
51
- ./spec/aircana/contexts/local_spec.rb[1:1:2] | passed | 0.00035 seconds |
52
- ./spec/aircana/contexts/local_spec.rb[1:1:3] | passed | 0.00035 seconds |
53
- ./spec/aircana/contexts/local_spec.rb[1:1:4] | passed | 0.00035 seconds |
54
- ./spec/aircana/contexts/local_spec.rb[1:1:5] | passed | 0.00035 seconds |
55
- ./spec/aircana/contexts/local_spec.rb[1:1:6] | passed | 0.00041 seconds |
56
- ./spec/aircana/contexts/local_spec.rb[1:1:7] | passed | 0.00074 seconds |
57
- ./spec/aircana/contexts/local_spec.rb[1:1:8] | passed | 0.00053 seconds |
58
- ./spec/aircana/contexts/manifest_spec.rb[1:1:1] | passed | 0.00117 seconds |
59
- ./spec/aircana/contexts/manifest_spec.rb[1:1:2] | passed | 0.00128 seconds |
60
- ./spec/aircana/contexts/manifest_spec.rb[1:2:1] | passed | 0.00124 seconds |
61
- ./spec/aircana/contexts/manifest_spec.rb[1:2:2] | passed | 0.00103 seconds |
62
- ./spec/aircana/contexts/manifest_spec.rb[1:3:1] | passed | 0.00107 seconds |
63
- ./spec/aircana/contexts/manifest_spec.rb[1:3:2] | passed | 0.00026 seconds |
64
- ./spec/aircana/contexts/manifest_spec.rb[1:3:3] | passed | 0.00113 seconds |
65
- ./spec/aircana/contexts/manifest_spec.rb[1:3:4] | passed | 0.00108 seconds |
66
- ./spec/aircana/contexts/manifest_spec.rb[1:4:1] | passed | 0.00102 seconds |
67
- ./spec/aircana/contexts/manifest_spec.rb[1:4:2] | passed | 0.00021 seconds |
68
- ./spec/aircana/contexts/manifest_spec.rb[1:5:1] | passed | 0.00086 seconds |
69
- ./spec/aircana/contexts/manifest_spec.rb[1:5:2] | passed | 0.0002 seconds |
70
- ./spec/aircana/contexts/manifest_spec.rb[1:6:1] | passed | 0.00038 seconds |
71
- ./spec/aircana/contexts/manifest_spec.rb[1:6:2] | passed | 0.00019 seconds |
72
- ./spec/aircana/contexts/manifest_spec.rb[1:6:3] | passed | 0.0002 seconds |
57
+ ./spec/aircana/contexts/local_spec.rb[1:1:2] | passed | 0.00055 seconds |
58
+ ./spec/aircana/contexts/local_spec.rb[1:1:3] | passed | 0.00046 seconds |
59
+ ./spec/aircana/contexts/local_spec.rb[1:1:4] | passed | 0.00036 seconds |
60
+ ./spec/aircana/contexts/local_spec.rb[1:1:5] | passed | 0.00037 seconds |
61
+ ./spec/aircana/contexts/local_spec.rb[1:1:6] | passed | 0.0004 seconds |
62
+ ./spec/aircana/contexts/local_spec.rb[1:1:7] | passed | 0.00065 seconds |
63
+ ./spec/aircana/contexts/local_spec.rb[1:1:8] | passed | 0.00049 seconds |
64
+ ./spec/aircana/contexts/manifest_spec.rb[1:1:1] | passed | 0.00118 seconds |
65
+ ./spec/aircana/contexts/manifest_spec.rb[1:1:2] | passed | 0.00176 seconds |
66
+ ./spec/aircana/contexts/manifest_spec.rb[1:2:1] | passed | 0.00141 seconds |
67
+ ./spec/aircana/contexts/manifest_spec.rb[1:2:2] | passed | 0.00105 seconds |
68
+ ./spec/aircana/contexts/manifest_spec.rb[1:3:1] | passed | 0.00117 seconds |
69
+ ./spec/aircana/contexts/manifest_spec.rb[1:3:2] | passed | 0.00029 seconds |
70
+ ./spec/aircana/contexts/manifest_spec.rb[1:3:3] | passed | 0.00105 seconds |
71
+ ./spec/aircana/contexts/manifest_spec.rb[1:3:4] | passed | 0.00099 seconds |
72
+ ./spec/aircana/contexts/manifest_spec.rb[1:4:1] | passed | 0.00094 seconds |
73
+ ./spec/aircana/contexts/manifest_spec.rb[1:4:2] | passed | 0.00022 seconds |
74
+ ./spec/aircana/contexts/manifest_spec.rb[1:5:1] | passed | 0.0009 seconds |
75
+ ./spec/aircana/contexts/manifest_spec.rb[1:5:2] | passed | 0.00021 seconds |
76
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:1] | passed | 0.00024 seconds |
77
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:2] | passed | 0.00022 seconds |
78
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:3] | passed | 0.00022 seconds |
73
79
  ./spec/aircana/contexts/manifest_spec.rb[1:6:4] | passed | 0.0002 seconds |
74
- ./spec/aircana/contexts/manifest_spec.rb[1:6:5] | passed | 0.00036 seconds |
75
- ./spec/aircana/contexts/manifest_spec.rb[1:6:6] | passed | 0.00033 seconds |
76
- ./spec/aircana/contexts/manifest_spec.rb[1:6:7] | passed | 0.00022 seconds |
77
- ./spec/aircana/contexts/manifest_spec.rb[1:6:8] | passed | 0.00022 seconds |
80
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:5] | passed | 0.0002 seconds |
81
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:6] | passed | 0.00018 seconds |
82
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:7] | passed | 0.0002 seconds |
83
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:8] | passed | 0.0002 seconds |
78
84
  ./spec/aircana/contexts/manifest_spec.rb[1:6:9] | passed | 0.00021 seconds |
79
85
  ./spec/aircana/contexts/manifest_spec.rb[1:6:10] | passed | 0.00022 seconds |
80
- ./spec/aircana/contexts/manifest_spec.rb[1:6:11] | passed | 0.00103 seconds |
81
- ./spec/aircana/contexts/manifest_spec.rb[1:6:12] | passed | 0.00088 seconds |
86
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:11] | passed | 0.00095 seconds |
87
+ ./spec/aircana/contexts/manifest_spec.rb[1:6:12] | passed | 0.00086 seconds |
82
88
  ./spec/aircana/contexts/web_spec.rb[1:1:1] | passed | 0.00022 seconds |
83
89
  ./spec/aircana/contexts/web_spec.rb[1:2:1] | passed | 0.00018 seconds |
84
90
  ./spec/aircana/contexts/web_spec.rb[1:3:1:1] | passed | 0.00012 seconds |
@@ -86,102 +92,127 @@ example_id | status | run_t
86
92
  ./spec/aircana/contexts/web_spec.rb[1:3:1:3] | passed | 0.0001 seconds |
87
93
  ./spec/aircana/contexts/web_spec.rb[1:3:2:1] | passed | 0.00015 seconds |
88
94
  ./spec/aircana/contexts/web_spec.rb[1:3:2:2] | passed | 0.00011 seconds |
89
- ./spec/aircana/contexts/web_spec.rb[1:3:3:1] | passed | 0.00017 seconds |
90
- ./spec/aircana/contexts/web_spec.rb[1:3:3:2] | passed | 0.00028 seconds |
91
- ./spec/aircana/contexts/web_spec.rb[1:3:3:3] | passed | 0.00023 seconds |
95
+ ./spec/aircana/contexts/web_spec.rb[1:3:3:1] | passed | 0.00015 seconds |
96
+ ./spec/aircana/contexts/web_spec.rb[1:3:3:2] | passed | 0.00026 seconds |
97
+ ./spec/aircana/contexts/web_spec.rb[1:3:3:3] | passed | 0.00022 seconds |
92
98
  ./spec/aircana/contexts/web_spec.rb[1:3:3:4] | passed | 0.00015 seconds |
93
- ./spec/aircana/contexts/web_spec.rb[1:3:3:5] | passed | 0.00027 seconds |
99
+ ./spec/aircana/contexts/web_spec.rb[1:3:3:5] | passed | 0.0002 seconds |
94
100
  ./spec/aircana/contexts/web_spec.rb[1:3:4:1] | passed | 0.00012 seconds |
95
101
  ./spec/aircana/contexts/web_spec.rb[1:3:4:2] | passed | 0.00011 seconds |
96
- ./spec/aircana/contexts/web_spec.rb[1:3:4:3] | passed | 0.00011 seconds |
97
- ./spec/aircana/contexts/web_spec.rb[1:3:5:1] | passed | 0.00078 seconds |
98
- ./spec/aircana/contexts/web_spec.rb[1:3:5:2] | passed | 0.00019 seconds |
99
- ./spec/aircana/contexts/web_spec.rb[1:3:5:3] | passed | 0.0004 seconds |
100
- ./spec/aircana/contexts/web_spec.rb[1:3:6:1] | passed | 0.00024 seconds |
101
- ./spec/aircana/contexts/web_spec.rb[1:3:6:2] | passed | 0.00023 seconds |
102
- ./spec/aircana/contexts/web_spec.rb[1:3:6:3] | passed | 0.00022 seconds |
103
- ./spec/aircana/contexts/web_spec.rb[1:3:7:1] | passed | 0.00012 seconds |
104
- ./spec/aircana/contexts/web_spec.rb[1:3:7:2] | passed | 0.0001 seconds |
105
- ./spec/aircana/fzf_helper_spec.rb[1:1:1:1] | passed | 0.00018 seconds |
106
- ./spec/aircana/fzf_helper_spec.rb[1:1:1:2] | passed | 0.00016 seconds |
107
- ./spec/aircana/fzf_helper_spec.rb[1:1:1:3] | passed | 0.0002 seconds |
108
- ./spec/aircana/fzf_helper_spec.rb[1:1:2:1] | passed | 0.00021 seconds |
109
- ./spec/aircana/fzf_helper_spec.rb[1:1:3:1] | passed | 0.00021 seconds |
102
+ ./spec/aircana/contexts/web_spec.rb[1:3:4:3] | passed | 0.00012 seconds |
103
+ ./spec/aircana/contexts/web_spec.rb[1:3:5:1] | passed | 0.00074 seconds |
104
+ ./spec/aircana/contexts/web_spec.rb[1:3:5:2] | passed | 0.00013 seconds |
105
+ ./spec/aircana/contexts/web_spec.rb[1:3:5:3] | passed | 0.00032 seconds |
106
+ ./spec/aircana/contexts/web_spec.rb[1:3:6:1] | passed | 0.00025 seconds |
107
+ ./spec/aircana/contexts/web_spec.rb[1:3:6:2] | passed | 0.00028 seconds |
108
+ ./spec/aircana/contexts/web_spec.rb[1:3:6:3] | passed | 0.00042 seconds |
109
+ ./spec/aircana/contexts/web_spec.rb[1:3:7:1] | passed | 0.00015 seconds |
110
+ ./spec/aircana/contexts/web_spec.rb[1:3:7:2] | passed | 0.00012 seconds |
111
+ ./spec/aircana/fzf_helper_spec.rb[1:1:1:1] | passed | 0.00017 seconds |
112
+ ./spec/aircana/fzf_helper_spec.rb[1:1:1:2] | passed | 0.00015 seconds |
113
+ ./spec/aircana/fzf_helper_spec.rb[1:1:1:3] | passed | 0.00019 seconds |
114
+ ./spec/aircana/fzf_helper_spec.rb[1:1:2:1] | passed | 0.00024 seconds |
115
+ ./spec/aircana/fzf_helper_spec.rb[1:1:3:1] | passed | 0.00027 seconds |
110
116
  ./spec/aircana/fzf_helper_spec.rb[1:2:1:1] | passed | 0.0001 seconds |
111
117
  ./spec/aircana/fzf_helper_spec.rb[1:2:1:2] | passed | 0.0001 seconds |
112
- ./spec/aircana/fzf_helper_spec.rb[1:2:1:3] | passed | 0.0001 seconds |
113
- ./spec/aircana/fzf_helper_spec.rb[1:2:2:1] | passed | 0.0001 seconds |
114
- ./spec/aircana/fzf_helper_spec.rb[1:2:2:2] | passed | 0.00008 seconds |
118
+ ./spec/aircana/fzf_helper_spec.rb[1:2:1:3] | passed | 0.00012 seconds |
119
+ ./spec/aircana/fzf_helper_spec.rb[1:2:2:1] | passed | 0.00009 seconds |
120
+ ./spec/aircana/fzf_helper_spec.rb[1:2:2:2] | passed | 0.00009 seconds |
115
121
  ./spec/aircana/generators/hooks_generator_spec.rb[1:1:1] | passed | 0.00003 seconds |
116
122
  ./spec/aircana/generators/hooks_generator_spec.rb[1:2:1] | passed | 0.00003 seconds |
117
- ./spec/aircana/generators/hooks_generator_spec.rb[1:3:1] | passed | 0.00043 seconds |
118
- ./spec/aircana/generators/hooks_generator_spec.rb[1:3:2] | passed | 0.00018 seconds |
123
+ ./spec/aircana/generators/hooks_generator_spec.rb[1:3:1] | passed | 0.0004 seconds |
124
+ ./spec/aircana/generators/hooks_generator_spec.rb[1:3:2] | passed | 0.00019 seconds |
119
125
  ./spec/aircana/generators/hooks_generator_spec.rb[1:4:1] | passed | 0.00009 seconds |
120
126
  ./spec/aircana/generators/hooks_generator_spec.rb[1:5:1:1] | passed | 0.00009 seconds |
121
- ./spec/aircana/generators/hooks_generator_spec.rb[1:5:2:1] | passed | 0.00003 seconds |
122
- ./spec/aircana/generators/hooks_generator_spec.rb[1:6:1] | passed | 0.00057 seconds |
123
- ./spec/aircana/generators/hooks_generator_spec.rb[1:7:1] | passed | 0.00014 seconds |
124
- ./spec/aircana/generators/plan_command_generator_spec.rb[1:1:1] | passed | 0.00056 seconds |
125
- ./spec/aircana/generators/plan_command_generator_spec.rb[1:1:2] | passed | 0.00031 seconds |
126
- ./spec/aircana/generators/plan_command_generator_spec.rb[1:1:3] | passed | 0.00029 seconds |
127
- ./spec/aircana/generators/plan_command_generator_spec.rb[1:2:1] | passed | 0.00009 seconds |
128
- ./spec/aircana/generators/plan_command_generator_spec.rb[1:2:2] | passed | 0.00007 seconds |
129
- ./spec/aircana/generators/skills_generator_spec.rb[1:1:1] | passed | 0.00036 seconds |
130
- ./spec/aircana/generators/skills_generator_spec.rb[1:1:2] | passed | 0.00019 seconds |
131
- ./spec/aircana/generators/skills_generator_spec.rb[1:1:3] | passed | 0.00018 seconds |
132
- ./spec/aircana/generators/skills_generator_spec.rb[1:2:1] | passed | 0.00029 seconds |
133
- ./spec/aircana/generators/skills_generator_spec.rb[1:2:2] | passed | 0.00048 seconds |
134
- ./spec/aircana/generators/skills_generator_spec.rb[1:2:3] | passed | 0.00035 seconds |
135
- ./spec/aircana/generators/skills_generator_spec.rb[1:3:1] | passed | 0.00022 seconds |
136
- ./spec/aircana/generators/skills_generator_spec.rb[1:3:2] | passed | 0.00032 seconds |
137
- ./spec/aircana/generators/skills_generator_spec.rb[1:3:3] | passed | 0.0003 seconds |
138
- ./spec/aircana/generators/skills_generator_spec.rb[1:3:4] | passed | 0.0002 seconds |
139
- ./spec/aircana/generators/skills_generator_spec.rb[1:3:5] | passed | 0.00019 seconds |
140
- ./spec/aircana/generators/skills_generator_spec.rb[1:4:1] | passed | 0.00018 seconds |
141
- ./spec/aircana/generators/skills_generator_spec.rb[1:4:2] | passed | 0.00017 seconds |
142
- ./spec/aircana/generators/skills_generator_spec.rb[1:4:3] | passed | 0.0002 seconds |
143
- ./spec/aircana/generators/skills_generator_spec.rb[1:5:1] | passed | 0.00019 seconds |
144
- ./spec/aircana/generators/skills_generator_spec.rb[1:6:1] | passed | 0.00022 seconds |
145
- ./spec/aircana/generators/skills_generator_spec.rb[1:6:2] | passed | 0.00022 seconds |
146
- ./spec/aircana/generators/skills_generator_spec.rb[1:6:3] | passed | 0.0002 seconds |
147
- ./spec/aircana/generators/skills_generator_spec.rb[1:6:4] | passed | 0.0002 seconds |
148
- ./spec/aircana/generators/skills_generator_spec.rb[1:6:5] | passed | 0.00023 seconds |
149
- ./spec/aircana/generators/skills_generator_spec.rb[1:6:6] | passed | 0.00021 seconds |
150
- ./spec/aircana/generators/skills_generator_spec.rb[1:6:7] | passed | 0.0002 seconds |
151
- ./spec/aircana/generators/skills_generator_spec.rb[1:7:1] | passed | 0.00152 seconds |
152
- ./spec/aircana/generators/skills_generator_spec.rb[1:7:2] | passed | 0.00114 seconds |
127
+ ./spec/aircana/generators/hooks_generator_spec.rb[1:5:2:1] | passed | 0.00004 seconds |
128
+ ./spec/aircana/generators/hooks_generator_spec.rb[1:6:1] | passed | 0.00289 seconds |
129
+ ./spec/aircana/generators/hooks_generator_spec.rb[1:7:1] | passed | 0.00016 seconds |
130
+ ./spec/aircana/generators/plan_command_generator_spec.rb[1:1:1] | passed | 0.00073 seconds |
131
+ ./spec/aircana/generators/plan_command_generator_spec.rb[1:1:2] | passed | 0.00043 seconds |
132
+ ./spec/aircana/generators/plan_command_generator_spec.rb[1:1:3] | passed | 0.00033 seconds |
133
+ ./spec/aircana/generators/plan_command_generator_spec.rb[1:2:1] | passed | 0.00048 seconds |
134
+ ./spec/aircana/generators/plan_command_generator_spec.rb[1:2:2] | passed | 0.00008 seconds |
135
+ ./spec/aircana/generators/skills_generator_spec.rb[1:1:1] | passed | 0.00037 seconds |
136
+ ./spec/aircana/generators/skills_generator_spec.rb[1:1:2] | passed | 0.00022 seconds |
137
+ ./spec/aircana/generators/skills_generator_spec.rb[1:1:3] | passed | 0.0002 seconds |
138
+ ./spec/aircana/generators/skills_generator_spec.rb[1:2:1] | passed | 0.00033 seconds |
139
+ ./spec/aircana/generators/skills_generator_spec.rb[1:2:2] | passed | 0.00045 seconds |
140
+ ./spec/aircana/generators/skills_generator_spec.rb[1:2:3] | passed | 0.0004 seconds |
141
+ ./spec/aircana/generators/skills_generator_spec.rb[1:3:1] | passed | 0.00023 seconds |
142
+ ./spec/aircana/generators/skills_generator_spec.rb[1:3:2] | passed | 0.00024 seconds |
143
+ ./spec/aircana/generators/skills_generator_spec.rb[1:3:3] | passed | 0.00026 seconds |
144
+ ./spec/aircana/generators/skills_generator_spec.rb[1:3:4] | passed | 0.00021 seconds |
145
+ ./spec/aircana/generators/skills_generator_spec.rb[1:3:5] | passed | 0.00024 seconds |
146
+ ./spec/aircana/generators/skills_generator_spec.rb[1:4:1] | passed | 0.00023 seconds |
147
+ ./spec/aircana/generators/skills_generator_spec.rb[1:4:2] | passed | 0.00023 seconds |
148
+ ./spec/aircana/generators/skills_generator_spec.rb[1:4:3] | passed | 0.00024 seconds |
149
+ ./spec/aircana/generators/skills_generator_spec.rb[1:5:1] | passed | 0.00024 seconds |
150
+ ./spec/aircana/generators/skills_generator_spec.rb[1:6:1] | passed | 0.00025 seconds |
151
+ ./spec/aircana/generators/skills_generator_spec.rb[1:6:2] | passed | 0.00024 seconds |
152
+ ./spec/aircana/generators/skills_generator_spec.rb[1:6:3] | passed | 0.00022 seconds |
153
+ ./spec/aircana/generators/skills_generator_spec.rb[1:6:4] | passed | 0.00023 seconds |
154
+ ./spec/aircana/generators/skills_generator_spec.rb[1:6:5] | passed | 0.0002 seconds |
155
+ ./spec/aircana/generators/skills_generator_spec.rb[1:6:6] | passed | 0.00019 seconds |
156
+ ./spec/aircana/generators/skills_generator_spec.rb[1:6:7] | passed | 0.00019 seconds |
157
+ ./spec/aircana/generators/skills_generator_spec.rb[1:7:1] | passed | 0.00169 seconds |
158
+ ./spec/aircana/generators/skills_generator_spec.rb[1:7:2] | passed | 0.00142 seconds |
153
159
  ./spec/aircana/human_logger_spec.rb[1:1:1] | passed | 0.00008 seconds |
154
160
  ./spec/aircana/human_logger_spec.rb[1:2:1] | passed | 0.00004 seconds |
155
- ./spec/aircana/human_logger_spec.rb[1:3:1] | passed | 0.00007 seconds |
161
+ ./spec/aircana/human_logger_spec.rb[1:3:1] | passed | 0.00004 seconds |
156
162
  ./spec/aircana/human_logger_spec.rb[1:4:1] | passed | 0.00004 seconds |
157
163
  ./spec/aircana/human_logger_spec.rb[1:5:1] | passed | 0.00003 seconds |
158
- ./spec/aircana/human_logger_spec.rb[1:5:2] | passed | 0.00004 seconds |
164
+ ./spec/aircana/human_logger_spec.rb[1:5:2] | passed | 0.00003 seconds |
159
165
  ./spec/aircana/human_logger_spec.rb[1:5:3] | passed | 0.00003 seconds |
160
- ./spec/aircana/human_logger_spec.rb[1:5:4] | passed | 0.00006 seconds |
161
- ./spec/aircana/human_logger_spec.rb[1:5:5] | passed | 0.00005 seconds |
166
+ ./spec/aircana/human_logger_spec.rb[1:5:4] | passed | 0.00003 seconds |
167
+ ./spec/aircana/human_logger_spec.rb[1:5:5] | passed | 0.00003 seconds |
162
168
  ./spec/aircana/human_logger_spec.rb[1:5:6] | passed | 0.00003 seconds |
163
- ./spec/aircana/human_logger_spec.rb[1:5:7] | passed | 0.00004 seconds |
169
+ ./spec/aircana/human_logger_spec.rb[1:5:7] | passed | 0.00003 seconds |
164
170
  ./spec/aircana/human_logger_spec.rb[1:6:1] | passed | 0.00003 seconds |
165
- ./spec/aircana/llm/claude_client_spec.rb[1:1:1:1] | passed | 0.00051 seconds |
166
- ./spec/aircana/llm/claude_client_spec.rb[1:1:1:2] | passed | 0.00245 seconds |
167
- ./spec/aircana/llm/claude_client_spec.rb[1:1:1:3] | passed | 0.00028 seconds |
168
- ./spec/aircana/llm/claude_client_spec.rb[1:1:1:4] | passed | 0.00067 seconds |
169
- ./spec/aircana/llm/claude_client_spec.rb[1:1:2:1] | passed | 0.00032 seconds |
170
- ./spec/aircana/llm/claude_client_spec.rb[1:1:2:2] | passed | 0.00028 seconds |
171
- ./spec/aircana/llm/claude_client_spec.rb[1:1:3:1] | passed | 0.00052 seconds |
172
- ./spec/aircana/llm/claude_client_spec.rb[1:2:1] | passed | 0.00028 seconds |
173
- ./spec/aircana/llm/claude_client_spec.rb[1:2:2] | passed | 0.00027 seconds |
174
- ./spec/aircana/llm/claude_client_spec.rb[1:3:1:1] | passed | 0.0002 seconds |
175
- ./spec/aircana/llm/claude_client_spec.rb[1:3:1:2] | passed | 0.00018 seconds |
176
- ./spec/aircana/system_checker_spec.rb[1:1:1:1] | passed | 0.00026 seconds |
177
- ./spec/aircana/system_checker_spec.rb[1:1:2:1] | passed | 0.00045 seconds |
178
- ./spec/aircana/system_checker_spec.rb[1:1:3:1] | passed | 0.00053 seconds |
179
- ./spec/aircana/system_checker_spec.rb[1:2:1] | passed | 0.00025 seconds |
180
- ./spec/aircana/system_checker_spec.rb[1:2:2] | passed | 0.00019 seconds |
181
- ./spec/aircana/system_checker_spec.rb[1:3:1] | passed | 0.00017 seconds |
182
- ./spec/aircana/system_checker_spec.rb[1:3:2] | passed | 0.00018 seconds |
183
- ./spec/aircana/system_checker_spec.rb[1:3:3] | passed | 0.00042 seconds |
184
- ./spec/aircana/system_checker_spec.rb[1:3:4] | passed | 0.00034 seconds |
185
- ./spec/aircana/system_checker_spec.rb[1:3:5] | passed | 0.00019 seconds |
186
- ./spec/aircana_spec.rb[1:1] | passed | 0.00004 seconds |
187
- ./spec/aircana_spec.rb[1:2] | passed | 0.00086 seconds |
171
+ ./spec/aircana/llm/base_spec.rb[1:1:1] | passed | 0.0003 seconds |
172
+ ./spec/aircana/llm/base_spec.rb[1:2:1] | passed | 0.00025 seconds |
173
+ ./spec/aircana/llm/base_spec.rb[1:2:2] | passed | 0.00016 seconds |
174
+ ./spec/aircana/llm/base_spec.rb[1:2:3] | passed | 0.00016 seconds |
175
+ ./spec/aircana/llm/base_spec.rb[1:3:1:1] | passed | 0.00027 seconds |
176
+ ./spec/aircana/llm/base_spec.rb[1:3:2:1] | passed | 0.00023 seconds |
177
+ ./spec/aircana/llm/base_spec.rb[1:3:2:2] | passed | 0.00017 seconds |
178
+ ./spec/aircana/llm/base_spec.rb[1:3:3:1] | passed | 0.0003 seconds |
179
+ ./spec/aircana/llm/base_spec.rb[1:3:3:2] | passed | 0.00024 seconds |
180
+ ./spec/aircana/llm/bedrock_client_spec.rb[1:1:1:1] | passed | 0.04771 seconds |
181
+ ./spec/aircana/llm/bedrock_client_spec.rb[1:1:1:2] | passed | 0.00036 seconds |
182
+ ./spec/aircana/llm/bedrock_client_spec.rb[1:1:1:3] | passed | 0.0021 seconds |
183
+ ./spec/aircana/llm/bedrock_client_spec.rb[1:1:1:4] | passed | 0.00054 seconds |
184
+ ./spec/aircana/llm/bedrock_client_spec.rb[1:1:1:5] | passed | 0.00043 seconds |
185
+ ./spec/aircana/llm/bedrock_client_spec.rb[1:1:1:6] | passed | 0.0006 seconds |
186
+ ./spec/aircana/llm/bedrock_client_spec.rb[1:1:1:7] | passed | 0.0004 seconds |
187
+ ./spec/aircana/llm/bedrock_client_spec.rb[1:1:2:1] | passed | 0.00038 seconds |
188
+ ./spec/aircana/llm/bedrock_client_spec.rb[1:1:2:2] | passed | 0.00037 seconds |
189
+ ./spec/aircana/llm/bedrock_client_spec.rb[1:1:3:1] | passed | 0.00049 seconds |
190
+ ./spec/aircana/llm/bedrock_client_spec.rb[1:2:1] | passed | 0.00019 seconds |
191
+ ./spec/aircana/llm/claude_client_spec.rb[1:1:1:1] | passed | 0.00038 seconds |
192
+ ./spec/aircana/llm/claude_client_spec.rb[1:1:1:2] | passed | 0.00037 seconds |
193
+ ./spec/aircana/llm/claude_client_spec.rb[1:1:1:3] | passed | 0.0003 seconds |
194
+ ./spec/aircana/llm/claude_client_spec.rb[1:1:1:4] | passed | 0.00032 seconds |
195
+ ./spec/aircana/llm/claude_client_spec.rb[1:1:2:1] | passed | 0.00038 seconds |
196
+ ./spec/aircana/llm/claude_client_spec.rb[1:1:2:2] | passed | 0.0005 seconds |
197
+ ./spec/aircana/llm/claude_client_spec.rb[1:1:3:1] | passed | 0.00042 seconds |
198
+ ./spec/aircana/llm/claude_client_spec.rb[1:2:1] | passed | 0.00037 seconds |
199
+ ./spec/aircana/llm/claude_client_spec.rb[1:2:2] | passed | 0.00031 seconds |
200
+ ./spec/aircana/llm/claude_client_spec.rb[1:3:1:1] | passed | 0.00021 seconds |
201
+ ./spec/aircana/llm/claude_client_spec.rb[1:3:1:2] | passed | 0.00021 seconds |
202
+ ./spec/aircana/llm_spec.rb[1:1:1:1] | passed | 0.00008 seconds |
203
+ ./spec/aircana/llm_spec.rb[1:1:1:2] | passed | 0.00007 seconds |
204
+ ./spec/aircana/llm_spec.rb[1:1:2:1] | passed | 0.00007 seconds |
205
+ ./spec/aircana/llm_spec.rb[1:1:3:1] | passed | 0.00014 seconds |
206
+ ./spec/aircana/llm_spec.rb[1:1:3:2] | passed | 0.00012 seconds |
207
+ ./spec/aircana/system_checker_spec.rb[1:1:1:1] | passed | 0.00082 seconds |
208
+ ./spec/aircana/system_checker_spec.rb[1:1:2:1] | passed | 0.00167 seconds |
209
+ ./spec/aircana/system_checker_spec.rb[1:1:3:1] | passed | 0.0035 seconds |
210
+ ./spec/aircana/system_checker_spec.rb[1:2:1] | passed | 0.00098 seconds |
211
+ ./spec/aircana/system_checker_spec.rb[1:2:2] | passed | 0.00079 seconds |
212
+ ./spec/aircana/system_checker_spec.rb[1:3:1] | passed | 0.0006 seconds |
213
+ ./spec/aircana/system_checker_spec.rb[1:3:2] | passed | 0.0008 seconds |
214
+ ./spec/aircana/system_checker_spec.rb[1:3:3] | passed | 0.00093 seconds |
215
+ ./spec/aircana/system_checker_spec.rb[1:3:4] | passed | 0.0011 seconds |
216
+ ./spec/aircana/system_checker_spec.rb[1:3:5] | passed | 0.0014 seconds |
217
+ ./spec/aircana_spec.rb[1:1] | passed | 0.00005 seconds |
218
+ ./spec/aircana_spec.rb[1:2] | passed | 0.00114 seconds |
data/CHANGELOG.md CHANGED
@@ -5,6 +5,27 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [5.1.0]
9
+
10
+ ### Added
11
+ - Configurable LLM provider for summary/title generation
12
+ - New environment variable `AIRCANA_LLM_PROVIDER` to switch between providers
13
+ - Supports `claude` (default) and `bedrock` providers
14
+ - Claude provider uses Claude Code CLI for LLM calls
15
+ - Bedrock provider uses AWS Bedrock Runtime API with configurable region and model
16
+ - AWS Bedrock integration as alternative LLM provider
17
+ - New environment variables: `AIRCANA_BEDROCK_REGION` (default: `us-east-1`), `AIRCANA_BEDROCK_MODEL` (default: `anthropic.claude-3-haiku-20240307-v1:0`)
18
+ - Uses standard AWS credential chain for authentication
19
+ - Added `aws-sdk-bedrockruntime` as a bundled dependency
20
+ - New `Aircana::LLM` module with factory pattern
21
+ - `Aircana::LLM.client` returns configured provider instance
22
+ - Base class with shared functionality (spinner, content truncation)
23
+ - Unknown providers fall back to Claude with warning
24
+
25
+ ### Changed
26
+ - Refactored `ClaudeClient` to inherit from new `LLM::Base` class
27
+ - Web and Confluence contexts now use `Aircana::LLM.client` factory instead of direct `ClaudeClient` instantiation
28
+
8
29
  ## [5.0.0]
9
30
 
10
31
  ### Removed
data/README.md CHANGED
@@ -458,6 +458,40 @@ export CONFLUENCE_USERNAME="your.email@company.com"
458
458
  export CONFLUENCE_API_TOKEN="your-generated-token"
459
459
  ```
460
460
 
461
+ ### LLM Provider Setup (Optional)
462
+
463
+ Aircana uses an LLM to generate summaries and titles for knowledge base content. By default, it uses the Claude Code CLI, but you can configure it to use AWS Bedrock instead.
464
+
465
+ #### Environment Variables
466
+
467
+ ```bash
468
+ # Provider selection (default: claude)
469
+ export AIRCANA_LLM_PROVIDER="claude" # or "bedrock"
470
+
471
+ # Bedrock-specific settings (only used when provider is "bedrock")
472
+ export AIRCANA_BEDROCK_REGION="us-east-1" # default
473
+ export AIRCANA_BEDROCK_MODEL="anthropic.claude-3-haiku-20240307-v1:0" # default
474
+ ```
475
+
476
+ #### Using AWS Bedrock
477
+
478
+ To use Bedrock instead of the Claude Code CLI:
479
+
480
+ 1. **Configure AWS credentials** using any standard method (environment variables, IAM role, credentials file, etc.)
481
+
482
+ 2. **Set the provider:**
483
+ ```bash
484
+ export AIRCANA_LLM_PROVIDER="bedrock"
485
+ ```
486
+
487
+ 3. **Optionally configure region and model:**
488
+ ```bash
489
+ export AIRCANA_BEDROCK_REGION="us-west-2"
490
+ export AIRCANA_BEDROCK_MODEL="anthropic.claude-3-sonnet-20240229-v1:0"
491
+ ```
492
+
493
+ The Bedrock provider is useful in environments where the Claude Code CLI is not available or when you prefer to use your AWS infrastructure for LLM calls.
494
+
461
495
  ### SQS Notifications Setup (Optional)
462
496
 
463
497
  To enable SQS notifications for Claude Code events (useful for Slack/Teams integration):
data/exe/aircana CHANGED
@@ -8,6 +8,9 @@ Aircana.configure do |config|
8
8
  config.confluence_base_url = ENV.fetch("CONFLUENCE_BASE_URL", nil)
9
9
  config.confluence_username = ENV.fetch("CONFLUENCE_USERNAME", nil)
10
10
  config.confluence_api_token = ENV.fetch("CONFLUENCE_API_TOKEN", nil)
11
+ config.llm_provider = ENV.fetch("AIRCANA_LLM_PROVIDER", nil)
12
+ config.bedrock_region = ENV.fetch("AIRCANA_BEDROCK_REGION", nil)
13
+ config.bedrock_model = ENV.fetch("AIRCANA_BEDROCK_MODEL", nil)
11
14
  end
12
15
 
13
16
  Aircana::CLI::App.start(ARGV)
@@ -7,7 +7,8 @@ module Aircana
7
7
  attr_accessor :global_dir, :project_dir, :stream, :output_dir,
8
8
  :claude_code_config_path, :claude_code_project_config_path, :kb_knowledge_dir,
9
9
  :hooks_dir, :scripts_dir, :confluence_base_url, :confluence_username, :confluence_api_token,
10
- :plugin_root, :plugin_manifest_dir, :commands_dir, :skills_dir, :agents_dir
10
+ :plugin_root, :plugin_manifest_dir, :commands_dir, :skills_dir, :agents_dir,
11
+ :llm_provider, :bedrock_region, :bedrock_model
11
12
 
12
13
  def initialize
13
14
  setup_directory_paths
@@ -15,6 +16,7 @@ module Aircana
15
16
  setup_claude_code_paths
16
17
  setup_stream
17
18
  setup_confluence_config
19
+ setup_llm_config
18
20
  end
19
21
 
20
22
  # Returns true if the current directory is a plugin (has .claude-plugin/plugin.json)
@@ -116,5 +118,11 @@ module Aircana
116
118
  @confluence_username = nil
117
119
  @confluence_api_token = nil
118
120
  end
121
+
122
+ def setup_llm_config
123
+ @llm_provider = nil
124
+ @bedrock_region = nil
125
+ @bedrock_model = nil
126
+ end
119
127
  end
120
128
  end
@@ -107,7 +107,7 @@ module Aircana
107
107
 
108
108
  def generate_summary(content, title)
109
109
  prompt = build_summary_prompt(content, title)
110
- LLM::ClaudeClient.new.prompt(prompt).strip
110
+ Aircana::LLM.client.prompt(prompt).strip
111
111
  rescue StandardError => e
112
112
  Aircana.human_logger.warn("Failed to generate summary: #{e.message}")
113
113
  # Fallback to title or truncated content
@@ -7,7 +7,6 @@ require_relative "local"
7
7
  require_relative "manifest"
8
8
  require_relative "../progress_tracker"
9
9
  require_relative "../version"
10
- require_relative "../llm/claude_client"
11
10
 
12
11
  module Aircana
13
12
  module Contexts
@@ -162,8 +161,7 @@ module Aircana
162
161
 
163
162
  def generate_title_with_claude(content, url)
164
163
  prompt = build_title_generation_prompt(content, url)
165
- claude_client = LLM::ClaudeClient.new
166
- claude_client.prompt(prompt).strip
164
+ Aircana::LLM.client.prompt(prompt).strip
167
165
  end
168
166
 
169
167
  def build_title_generation_prompt(content, url) # rubocop:disable Metrics/MethodLength
@@ -219,7 +217,7 @@ module Aircana
219
217
 
220
218
  def generate_summary(content, title, url)
221
219
  prompt = build_summary_prompt(content, title, url)
222
- LLM::ClaudeClient.new.prompt(prompt).strip
220
+ Aircana::LLM.client.prompt(prompt).strip
223
221
  rescue StandardError => e
224
222
  Aircana.human_logger.warn("Failed to generate summary: #{e.message}")
225
223
  # Fallback to title or truncated content
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "tty-spinner"
4
+
5
+ module Aircana
6
+ module LLM
7
+ class Base
8
+ def initialize
9
+ @spinner = nil
10
+ end
11
+
12
+ def prompt(text)
13
+ raise NotImplementedError, "Subclasses must implement #prompt"
14
+ end
15
+
16
+ protected
17
+
18
+ def truncate_content(content, max_length = 2000)
19
+ return content if content.length <= max_length
20
+
21
+ "#{content[0..max_length]}..."
22
+ end
23
+
24
+ def start_spinner(message)
25
+ @spinner = TTY::Spinner.new("[:spinner] #{message}", format: :dots)
26
+ @spinner.auto_spin
27
+ end
28
+
29
+ def success_spinner(message)
30
+ return unless @spinner
31
+
32
+ @spinner.stop("✓")
33
+ puts message
34
+ end
35
+
36
+ def error_spinner(message)
37
+ return unless @spinner
38
+
39
+ @spinner.stop("✗")
40
+ puts message
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "aws-sdk-bedrockruntime"
4
+ require_relative "base"
5
+
6
+ module Aircana
7
+ module LLM
8
+ class BedrockClient < Base
9
+ DEFAULT_REGION = "us-east-1"
10
+ DEFAULT_MODEL = "anthropic.claude-3-haiku-20240307-v1:0"
11
+
12
+ def prompt(text)
13
+ start_spinner("Generating response with Bedrock...")
14
+
15
+ begin
16
+ result = invoke_bedrock(text)
17
+ success_spinner("Generated response with Bedrock")
18
+ result.strip
19
+ rescue StandardError => e
20
+ error_spinner("Failed to generate response: #{e.message}")
21
+ raise Error, "Bedrock request failed: #{e.message}"
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def invoke_bedrock(text)
28
+ client = build_client
29
+ response = client.invoke_model(
30
+ model_id: model_id,
31
+ content_type: "application/json",
32
+ accept: "application/json",
33
+ body: build_request_body(text)
34
+ )
35
+
36
+ parse_response(response)
37
+ end
38
+
39
+ def build_client
40
+ Aws::BedrockRuntime::Client.new(region: region)
41
+ end
42
+
43
+ def region
44
+ Aircana.configuration.bedrock_region || DEFAULT_REGION
45
+ end
46
+
47
+ def model_id
48
+ Aircana.configuration.bedrock_model || DEFAULT_MODEL
49
+ end
50
+
51
+ def build_request_body(text)
52
+ {
53
+ anthropic_version: "bedrock-2023-05-31",
54
+ max_tokens: 1024,
55
+ messages: [
56
+ {
57
+ role: "user",
58
+ content: text
59
+ }
60
+ ]
61
+ }.to_json
62
+ end
63
+
64
+ def parse_response(response)
65
+ body = JSON.parse(response.body.read)
66
+ content = body.dig("content", 0, "text")
67
+ raise Error, "No content in Bedrock response" unless content
68
+
69
+ content
70
+ end
71
+ end
72
+ end
73
+ end
@@ -1,15 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "English"
4
- require "tty-spinner"
4
+ require_relative "base"
5
5
 
6
6
  module Aircana
7
7
  module LLM
8
- class ClaudeClient
9
- def initialize
10
- @spinner = nil
11
- end
12
-
8
+ class ClaudeClient < Base
13
9
  def prompt(text)
14
10
  start_spinner("Generating response with Claude...")
15
11
 
@@ -25,25 +21,6 @@ module Aircana
25
21
 
26
22
  private
27
23
 
28
- def start_spinner(message)
29
- @spinner = TTY::Spinner.new("[:spinner] #{message}", format: :dots)
30
- @spinner.auto_spin
31
- end
32
-
33
- def success_spinner(message)
34
- return unless @spinner
35
-
36
- @spinner.stop("✓")
37
- puts message
38
- end
39
-
40
- def error_spinner(message)
41
- return unless @spinner
42
-
43
- @spinner.stop("✗")
44
- puts message
45
- end
46
-
47
24
  def execute_claude_command(text)
48
25
  command = build_claude_command(text)
49
26
  execute_system_command(command)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Aircana
4
- VERSION = "5.0.0.rc1"
4
+ VERSION = "5.1.0"
5
5
  end
data/lib/aircana.rb CHANGED
@@ -12,9 +12,33 @@ require_relative "aircana/cli"
12
12
  require_relative "aircana/generators"
13
13
  require_relative "aircana/contexts/confluence"
14
14
  require_relative "aircana/contexts/local"
15
+ require_relative "aircana/llm/base"
15
16
  require_relative "aircana/llm/claude_client"
16
17
 
17
18
  module Aircana
19
+ module LLM
20
+ class << self
21
+ def client
22
+ case provider
23
+ when "bedrock"
24
+ require_relative "aircana/llm/bedrock_client"
25
+ BedrockClient.new
26
+ when "claude", nil
27
+ ClaudeClient.new
28
+ else
29
+ Aircana.human_logger.warn("Unknown LLM provider '#{provider}', falling back to Claude")
30
+ ClaudeClient.new
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def provider
37
+ Aircana.configuration.llm_provider
38
+ end
39
+ end
40
+ end
41
+
18
42
  class Error < StandardError; end
19
43
 
20
44
  class << self
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aircana
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0.rc1
4
+ version: 5.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Weston Dransfield
@@ -9,6 +9,20 @@ bindir: exe
9
9
  cert_chain: []
10
10
  date: 2026-01-28 00:00:00.000000000 Z
11
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: aws-sdk-bedrockruntime
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '1.0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '1.0'
12
26
  - !ruby/object:Gem::Dependency
13
27
  name: httparty
14
28
  requirement: !ruby/object:Gem::Requirement
@@ -152,6 +166,8 @@ files:
152
166
  - lib/aircana/hooks_manifest.rb
153
167
  - lib/aircana/human_logger.rb
154
168
  - lib/aircana/initializers.rb
169
+ - lib/aircana/llm/base.rb
170
+ - lib/aircana/llm/bedrock_client.rb
155
171
  - lib/aircana/llm/claude_client.rb
156
172
  - lib/aircana/plugin_manifest.rb
157
173
  - lib/aircana/progress_tracker.rb