aidevops 3.32.256 → 3.32.259

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.
package/README.md CHANGED
@@ -60,7 +60,7 @@ The result: an AI operations platform that manages projects across every busines
60
60
  [![Copyright](https://img.shields.io/badge/Copyright-Marcus%20Quinn%202025--2026-blue.svg)](https://github.com/marcusquinn)
61
61
 
62
62
  <!-- Release & Version Info -->
63
- [![Version](https://img.shields.io/badge/Version-3.32.256-blue.svg)](https://github.com/marcusquinn/aidevops/releases)
63
+ [![Version](https://img.shields.io/badge/Version-3.32.259-blue.svg)](https://github.com/marcusquinn/aidevops/releases)
64
64
  [![npm version](https://img.shields.io/npm/v/aidevops)](https://www.npmjs.com/package/aidevops)
65
65
  [![Homebrew](https://img.shields.io/badge/homebrew-marcusquinn%2Ftap-orange)](https://github.com/marcusquinn/homebrew-tap)
66
66
  [![GitHub repository](https://img.shields.io/badge/github-repository-181717.svg?logo=github)](https://github.com/marcusquinn/aidevops)
package/VERSION CHANGED
@@ -1 +1 @@
1
- 3.32.256
1
+ 3.32.259
package/aidevops.sh CHANGED
@@ -5,7 +5,7 @@
5
5
  # AI DevOps Framework CLI
6
6
  # Usage: aidevops <command> [options]
7
7
  #
8
- # Version: 3.32.256
8
+ # Version: 3.32.259
9
9
 
10
10
  set -euo pipefail
11
11
 
package/bun.lock CHANGED
@@ -70,6 +70,7 @@
70
70
  "esbuild": "0.28.1",
71
71
  "fast-uri": "3.1.5",
72
72
  "js-yaml": "4.3.1",
73
+ "nanoid": "3.3.18",
73
74
  "postcss": "8.5.23",
74
75
  },
75
76
  "packages": {
@@ -427,7 +428,7 @@
427
428
 
428
429
  "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
429
430
 
430
- "nanoid": ["nanoid@3.3.17", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g=="],
431
+ "nanoid": ["nanoid@3.3.18", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w=="],
431
432
 
432
433
  "node-releases": ["node-releases@2.0.48", "", {}, "sha512-1uz8041X6LoI6ZSdZacM9lVY28vuzDlSKitnpbSNK0RfKoIJkX29NBPVEFXhnuSuEOA9Ww0xnPJ+ILWbGAv8DA=="],
433
434
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aidevops",
3
- "version": "3.32.256",
3
+ "version": "3.32.259",
4
4
  "description": "AI DevOps Framework - AI-assisted development workflows, code quality, and deployment automation",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.3.11",
@@ -81,6 +81,7 @@
81
81
  "esbuild": "0.28.1",
82
82
  "fast-uri": "3.1.5",
83
83
  "js-yaml": "4.3.1",
84
+ "nanoid": "3.3.18",
84
85
  "postcss": "8.5.23"
85
86
  },
86
87
  "peerDependencies": {
@@ -211,6 +211,44 @@ function IconSwitch<TValue extends string>({ ariaLabel, options, value }: {
211
211
  );
212
212
  }
213
213
 
214
+ function LocalRepoSelector({ repos, selectedLocalRepoIndex, selectRepoByIndex, setSelectedLocalRepoIndex, setSelectedSessionId }: {
215
+ repos: GuiStatusData["local_repos"]["repos"];
216
+ selectedLocalRepoIndex: number;
217
+ selectRepoByIndex: (index: number) => void;
218
+ setSelectedLocalRepoIndex: (index: number) => void;
219
+ setSelectedSessionId: (id: string | undefined) => void;
220
+ }) {
221
+ return (
222
+ <section className="repo-session-selector" aria-label={text.localRepoSelector}>
223
+ <span className="repo-selector-heading" id="local-repo-selector-label">{text.localRepos}</span>
224
+ <div className="selector-with-stepper repo-selector-row">
225
+ <button aria-label="Previous local repo" className="selector-step-button" disabled={repos.length === 0} onClick={() => selectRepoByIndex(wrappedOptionIndex(selectedLocalRepoIndex, repos.length, -1))} type="button"><FiChevronLeft aria-hidden="true" /></button>
226
+ <select aria-labelledby="local-repo-selector-label" onChange={(event) => { setSelectedLocalRepoIndex(Number.parseInt(event.currentTarget.value, 10)); setSelectedSessionId(undefined); }} value={Math.min(selectedLocalRepoIndex, Math.max(0, repos.length - 1))}>
227
+ {repos.length === 0 ? <option value={0}>No local repos</option> : repos.map((repo, index) => <option key={repo.path_ref} value={index}>{repo.name}</option>)}
228
+ </select>
229
+ <button aria-label="Next local repo" className="selector-step-button" disabled={repos.length === 0} onClick={() => selectRepoByIndex(wrappedOptionIndex(selectedLocalRepoIndex, repos.length, 1))} type="button"><FiChevronRight aria-hidden="true" /></button>
230
+ </div>
231
+ </section>
232
+ );
233
+ }
234
+
235
+ function SessionHistoryList({ activeSessionId, selectedRepo, sessions, setSelectedSessionId }: {
236
+ activeSessionId: string | undefined;
237
+ selectedRepo: GuiStatusData["local_repos"]["repos"][number] | undefined;
238
+ sessions: GuiStatusData["opencode_sessions"]["sessions"];
239
+ setSelectedSessionId: (id: string | undefined) => void;
240
+ }) {
241
+ return (
242
+ <section className="sidebar-group session-history-list">
243
+ {selectedRepo ? <ul>
244
+ {sessions.length === 0
245
+ ? <li><button className="surface-link active" type="button"><span className="surface-icon" aria-hidden="true"><FiHash /></span><span className="surface-copy"><strong>{selectedRepo.name}</strong><small>No OpenCode sessions found for this repo yet.</small></span><em>{text.planned}</em></button></li>
246
+ : sessions.map((session) => <li key={session.id_ref}><button className={activeSessionId === session.id_ref ? "surface-link active" : "surface-link"} onClick={() => setSelectedSessionId(session.id_ref)} type="button"><span className="surface-icon" aria-hidden="true"><FiHash /></span><span className="surface-copy"><strong>{session.title}</strong><small>{session.updated_at}</small></span></button></li>)}
247
+ </ul> : <p className="empty-sidebar-state">No local repos discovered.</p>}
248
+ </section>
249
+ );
250
+ }
251
+
214
252
  function ConversationSidebar({ conversationMode, selectedLocalRepoIndex, selectedSessionId, setConversationMode, setSelectedLocalRepoIndex, setSelectedSessionId, status }: {
215
253
  conversationMode: ConversationMode;
216
254
  selectedLocalRepoIndex: number;
@@ -245,23 +283,8 @@ function ConversationSidebar({ conversationMode, selectedLocalRepoIndex, selecte
245
283
  <SidebarModeTabs mode={conversationMode} setMode={setConversationMode} />
246
284
  {conversationMode === "people" ? <PeopleChannelList /> : <>
247
285
  <button className="new-session-button" disabled title="Creating sessions needs an audited OpenCode write route." type="button">{text.newSession}</button>
248
- <section className="repo-session-selector" aria-label={text.localRepoSelector}>
249
- <span className="repo-selector-heading" id="local-repo-selector-label">{text.localRepos}</span>
250
- <div className="selector-with-stepper repo-selector-row">
251
- <button aria-label="Previous local repo" className="selector-step-button" disabled={repos.length === 0} onClick={() => selectRepoByIndex(wrappedOptionIndex(selectedLocalRepoIndex, repos.length, -1))} type="button"><FiChevronLeft aria-hidden="true" /></button>
252
- <select aria-labelledby="local-repo-selector-label" onChange={(event) => { setSelectedLocalRepoIndex(Number.parseInt(event.currentTarget.value, 10)); setSelectedSessionId(undefined); }} value={Math.min(selectedLocalRepoIndex, Math.max(0, repos.length - 1))}>
253
- {repos.length === 0 ? <option value={0}>No local repos</option> : repos.map((repo, index) => <option key={repo.path_ref} value={index}>{repo.name}</option>)}
254
- </select>
255
- <button aria-label="Next local repo" className="selector-step-button" disabled={repos.length === 0} onClick={() => selectRepoByIndex(wrappedOptionIndex(selectedLocalRepoIndex, repos.length, 1))} type="button"><FiChevronRight aria-hidden="true" /></button>
256
- </div>
257
- </section>
258
- <section className="sidebar-group session-history-list">
259
- {selectedRepo ? <ul>
260
- {sessions.length === 0
261
- ? <li><button className="surface-link active" type="button"><span className="surface-icon" aria-hidden="true"><FiHash /></span><span className="surface-copy"><strong>{selectedRepo.name}</strong><small>No OpenCode sessions found for this repo yet.</small></span><em>{text.planned}</em></button></li>
262
- : sessions.map((session) => <li key={session.id_ref}><button className={activeSessionId === session.id_ref ? "surface-link active" : "surface-link"} onClick={() => setSelectedSessionId(session.id_ref)} type="button"><span className="surface-icon" aria-hidden="true"><FiHash /></span><span className="surface-copy"><strong>{session.title}</strong><small>{session.updated_at}</small></span></button></li>)}
263
- </ul> : <p className="empty-sidebar-state">No local repos discovered.</p>}
264
- </section>
286
+ <LocalRepoSelector repos={repos} selectedLocalRepoIndex={selectedLocalRepoIndex} selectRepoByIndex={selectRepoByIndex} setSelectedLocalRepoIndex={setSelectedLocalRepoIndex} setSelectedSessionId={setSelectedSessionId} />
287
+ <SessionHistoryList activeSessionId={activeSessionId} selectedRepo={selectedRepo} sessions={sessions} setSelectedSessionId={setSelectedSessionId} />
265
288
  </>}
266
289
  </section>
267
290
  );
package/setup.sh CHANGED
@@ -17,7 +17,7 @@ fi
17
17
  # AI Assistant Server Access Framework Setup Script
18
18
  # Helps developers set up the framework for their infrastructure
19
19
  #
20
- # Version: 3.32.256
20
+ # Version: 3.32.259
21
21
  #
22
22
  # Quick Install:
23
23
  # npm install -g aidevops && aidevops update (recommended)