Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions .github/actions/setup-bun-deps/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,13 @@ runs:

- uses: oven-sh/setup-bun@v2

# node_modules навмисно НЕ кешується: відновлене з restore-keys дерево від
# іншого bun.lock після bun install --frozen-lockfile лишається без вкладених
# копій пакетів (eslint/node_modules/ajv тощо) — недетерміновані падіння eslint
- name: Cache Bun dependencies
uses: actions/cache@v5
with:
path: |
~/.bun/install/cache
node_modules
path: ~/.bun/install/cache
key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lock') }}
restore-keys: |
${{ runner.os }}-bun-
Expand Down
5 changes: 5 additions & 0 deletions app/.changes/260712-0836.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
bump: patch
section: Fixed
---
eslint 10.7: виправлено порушення нових unicorn-правил (prefer-await, better-dom-traversing та ін.)
3 changes: 1 addition & 2 deletions app/bin/docs/task.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@ type: JS Module
title: task.mjs
resource: app/bin/task.mjs
docgen:
crc: 86954155
crc: c2c46484
model: omlx/gemma-4-e4b-it-OptiQ-4bit
tier: local-min
score: 100
issues: judge:inaccurate:0.98
judgeModel: openai-codex/gpt-5.4-mini
Expand Down
17 changes: 8 additions & 9 deletions app/bin/task.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -217,12 +217,11 @@ async function main() {
return envelope.ok ? 0 : 2
}

main()
.then(code => {
// null = long-running mode (MCP server) — let the process live on its own handles.
if (code !== null) process.exit(code)
})
.catch(error => {
process.stderr.write(`${String(error?.message ?? error)}\n`)
process.exit(1)
})
try {
const code = await main()
// null = long-running mode (MCP server) — let the process live on its own handles.
if (code !== null) process.exit(code)
} catch (error) {
process.stderr.write(`${String(error?.message ?? error)}\n`)
process.exit(1)
}
3 changes: 1 addition & 2 deletions app/src/composables/docs/use-project-paths.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@ type: JS Module
title: use-project-paths.js
resource: app/src/composables/use-project-paths.js
docgen:
crc: 99c09765
crc: 02e55a8e
model: omlx/gemma-4-e4b-it-OptiQ-4bit
tier: local-min
score: 100
issues: best-of-2:retry-won,judge:inaccurate:0.98
judgeModel: openai-codex/gpt-5.4-mini
Expand Down
8 changes: 5 additions & 3 deletions app/src/composables/use-project-paths.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,12 @@ export function useProjectPaths() {
/**
* Persist the current paths to the Rust config (fire-and-forget).
*/
function persist() {
invoke('set_project_paths', { paths: projectPaths.value }).catch(() => {
async function persist() {
try {
await invoke('set_project_paths', { paths: projectPaths.value })
} catch {
// best-effort; not under Tauri (tests) or transient FS error
})
}
}

/**
Expand Down
3 changes: 1 addition & 2 deletions app/src/docs/format-ledger.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@ type: JS Module
title: format-ledger.js
resource: app/src/format-ledger.js
docgen:
crc: e5a514ea
crc: 81e5f952
model: omlx/gemma-4-e4b-it-OptiQ-4bit
tier: local-min
score: 100
issues: judge:inaccurate:0.98
judgeModel: openai-codex/gpt-5.4-mini
Expand Down
3 changes: 1 addition & 2 deletions app/src/docs/task-create.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@ type: JS Module
title: task-create.js
resource: app/src/task-create.js
docgen:
crc: b9f5c463
crc: 419e7332
model: omlx/gemma-4-e4b-it-OptiQ-4bit
tier: local-min
score: 100
issues: best-of-2:retry-won,judge:inaccurate:0.98
judgeModel: openai-codex/gpt-5.4-mini
Expand Down
2 changes: 1 addition & 1 deletion app/src/format-ledger.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ export function formatDuration(sec) {
const s = Math.round(sec)
const h = Math.floor(s / 3600)
const m = Math.floor((s % 3600) / 60)
const r = s % 60
if (h > 0) return `${h}h ${m}m`
const r = s % 60
if (m > 0) return `${m}m ${r}s`
return `${r}s`
}
Expand Down
2 changes: 1 addition & 1 deletion app/src/task-create.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export function validateTaskName(name) {
if (!name) return 'Вкажіть назву задачі'
for (const segment of name.split('/')) {
if (!segment) return 'Порожній сегмент — приберіть зайвий «/»'
if (![...segment].every(ch => isSegmentChar(ch))) return 'Лише a-z, 0-9, «-»; сегменти через «/»'
if ([...segment].some(ch => !isSegmentChar(ch))) return 'Лише a-z, 0-9, «-»; сегменти через «/»'
}
return null
}
Expand Down
1 change: 1 addition & 0 deletions app/src/tests/claims.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ const tree = () => [
}
]

/* eslint-disable unicorn/better-dom-traversing -- children тут — вузли task-дерева, не DOM */
describe('applyClaims', () => {
it('активний claim → running, прострочений → stalled (рекурсивно)', () => {
const nodes = applyClaims(tree(), [
Expand Down
6 changes: 3 additions & 3 deletions app/src/tests/task-create.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,9 @@ describe('buildCreateOpts', () => {
})

it('drops empty optional fields so .mt.json defaults apply', () => {
expect(buildCreateOpts({ mode: 'agent', modelTier: '', budgetSec: '', hint: ' ', deps: [], skills: [] })).toEqual(
{ mode: 'agent' }
)
expect(
buildCreateOpts({ mode: 'agent', modelTier: '', budgetSec: '', hint: ' '.repeat(3), deps: [], skills: [] })
).toEqual({ mode: 'agent' })
})

it('omits agent-only fields for human mode', () => {
Expand Down
4 changes: 2 additions & 2 deletions app/src/tests/ui-open.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ import { mountQuasar } from '../test-utils/quasar.js'

beforeEach(() => {
const store = {}
globalThis.localStorage = {
vi.stubGlobal('localStorage', {
getItem: key => (key in store ? store[key] : null),
setItem: (key, value) => {
store[key] = String(value)
},
removeItem: key => {
delete store[key]
}
}
})
})

vi.mock('@tauri-apps/api/core', () => ({ invoke: vi.fn(() => Promise.resolve([])) }))
Expand Down
5 changes: 5 additions & 0 deletions owner/.changes/260712-0840.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
bump: patch
section: Changed
---
release: app@0.5.4, owner@0.2.1
Loading