Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
cbbb454
Use local-sources for comfygit-core dev override instead of pyproject…
akatz-ai Feb 14, 2026
614eb3a
Add bead ID commit convention to CLAUDE.md and AGENTS.md
akatz-ai Feb 15, 2026
796c58a
Update pyproject sources and lockfile
akatz-ai Feb 15, 2026
762f883
Surface blocked node guidance across manager APIs and UI [cgm-225, cg…
akatz-ai Feb 15, 2026
bc06a4d
Lower xxhash pin from >=3.6.0 to >=3.5.0 for broken-source compat
akatz-ai Feb 15, 2026
d4130a6
Surface ComfyUI version mismatch details across status/workflow UI [c…
akatz-ai Feb 15, 2026
c029284
Update StatusSection tests for version guidance coverage [cgm-225]
akatz-ai Feb 15, 2026
6c0f4db
Fix text overflow in MissingResourcesPopup uninstallable nodes section
akatz-ai Feb 16, 2026
8f4dd7c
Enrich uninstallable node serialization with install metadata [cgm-ru…
akatz-ai Feb 16, 2026
40f25c7
Wire install plumbing for uninstallable nodes [cgm-ru0.3]
akatz-ai Feb 16, 2026
f8277de
Make community-mapped node installs actionable across frontend [cgm-r…
akatz-ai Feb 16, 2026
fea61bd
Expose package aliases and canonicalize missing-deps dedupe [cgm-ru0.…
akatz-ai Feb 16, 2026
667e0c0
Update uv.lock xxhash constraint
akatz-ai Feb 16, 2026
9e6752c
Harden backend: semver dedup, install validation, stats exposure [cgm…
akatz-ai Feb 16, 2026
cfb2fda
Harden frontend install tracking: queue race, timeout, error feedback…
akatz-ai Feb 16, 2026
0d3f1fc
Bump comfygit-core 0.3.19 → 0.3.20, manager 0.0.22 → 0.0.23
akatz-ai Feb 17, 2026
d929ddd
Merge pull request #24 from comfygit-ai/bump/core-0.3.20
akatz-ai Feb 17, 2026
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
15 changes: 15 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,21 @@ bd close <id> # Complete work
bd sync # Sync with git
```

## Commit Convention — Bead References

**When a commit implements, fixes, or closes a bead, include the bead ID(s) in the commit message.** This creates traceability between git history and issue tracking.

Format: `<description> [<bead-id>]` or `<description> [<bead-id>, <bead-id>]`

```
Add accelerator packages panel [cgm-2v9]
Fix switch lock stale errors [cgm-abc]
```

- Place bead ID(s) at the end of the first line in square brackets
- Use this for commits that directly address bead work — skip for unrelated housekeeping commits
- If a commit fully resolves a bead, also close it with `bd close`

## Landing the Plane (Session Completion)

**When ending a work session**, you MUST complete ALL steps below. Work is NOT complete until `git push` succeeds.
Expand Down
26 changes: 26 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,32 @@ We are still pre-customer - any unnecessary fallbacks, unnecessary versioning, t
Simple, elegant, maintainable code is the goal.
We DONT want any legacy or backwards compatible code.

## Issue Tracking (Beads)

Uses beads (`bd`) with prefix **`cgm-`**. Use for multi-session or dependent work; skip for simple single-session fixes.

```bash
bd ready # Find available work
bd show cgm-xxx # View issue details
bd close cgm-xxx # Complete work
bd sync # Sync with git
```

### Commit Convention — Bead References

**When a commit implements, fixes, or closes a bead, include the bead ID(s) in the commit message.** This creates traceability between git history and issue tracking.

Format: `<description> [<bead-id>]` or `<description> [<bead-id>, <bead-id>]`

```
Add accelerator packages panel [cgm-2v9]
Fix switch lock stale errors [cgm-abc]
```

- Place bead ID(s) at the end of the first line in square brackets
- Use this for commits that directly address bead work — skip for unrelated housekeeping commits
- If a commit fully resolves a bead, also close it with `bd close`

## Cross-Platform Compatibility
This codebase must run on **Windows, Linux, and macOS**. All engineering choices should consider cross-platform compatibility:
- Use `pathlib.Path` instead of string concatenation for file paths
Expand Down
47 changes: 39 additions & 8 deletions frontend/src/components/MissingResourcesDetailModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,17 @@
<span v-else-if="isFailed(item)" class="failed-badge" :title="getFailureReason(item)">Failed ⚠</span>
<span v-else-if="isInstalled(item)" class="installed-badge">Installed</span>
<span v-else-if="isQueued(item)" class="queued-badge">Queued</span>
<BaseButton v-else size="sm" variant="secondary" @click="emit('action', item)">
{{ actionLabel }}
</BaseButton>
<div v-else class="action-buttons">
<BaseButton
v-for="action in getItemActions(item)"
:key="`${item.id}-${action.key}`"
size="sm"
:variant="action.variant || 'secondary'"
@click="emit('action', item, action.key)"
>
{{ action.label }}
</BaseButton>
</div>
</template>

<!-- Non-actionable items: show reason -->
Expand All @@ -51,18 +59,25 @@ import { computed } from 'vue'
import BaseModal from './base/BaseModal.vue'
import BaseButton from './base/BaseButton.vue'

export interface ResourceAction {
key: string
label: string
variant?: 'primary' | 'secondary' | 'ghost'
}

export interface ResourceItem {
id: string
name: string
subtitle?: string
canAction: boolean
actionDisabledReason?: string
actions?: ResourceAction[]
}

const props = defineProps<{
title: string
items: ResourceItem[]
itemType: 'model' | 'package'
itemType: 'models' | 'packages' | 'community'
queuedItems: Set<string>
installedItems?: Set<string>
failedItems?: Map<string, string>
Expand All @@ -71,12 +86,10 @@ const props = defineProps<{

const emit = defineEmits<{
close: []
action: [item: ResourceItem]
action: [item: ResourceItem, actionKey?: string]
'bulk-action': []
}>()

const actionLabel = computed(() => props.itemType === 'model' ? 'Download' : 'Install')

const actionableItems = computed(() => props.items.filter(i => i.canAction))

const allDone = computed(() => {
Expand All @@ -90,7 +103,7 @@ const allDone = computed(() => {

const bulkActionLabel = computed(() => {
if (allDone.value) return 'All Queued'
return props.itemType === 'model' ? 'Download All' : 'Install All'
return props.itemType === 'models' ? 'Download All' : 'Install All'
})

function isQueued(item: ResourceItem): boolean {
Expand All @@ -112,6 +125,18 @@ function isFailed(item: ResourceItem): boolean {
function getFailureReason(item: ResourceItem): string {
return props.failedItems?.get(item.id) || 'Unknown error'
}

function getItemActions(item: ResourceItem): ResourceAction[] {
if (item.actions && item.actions.length > 0) {
return item.actions
}

return [{
key: 'default',
label: props.itemType === 'models' ? 'Download' : 'Install',
variant: 'secondary'
}]
}
</script>

<style scoped>
Expand Down Expand Up @@ -149,6 +174,12 @@ function getFailureReason(item: ResourceItem): string {
border-bottom: 1px solid var(--cg-color-border);
}

.action-buttons {
display: inline-flex;
align-items: center;
gap: var(--cg-space-1);
}

.item-info {
display: flex;
align-items: center;
Expand Down
Loading