multica-ai/multica · error · errSkillBundleUnavailable

%w: skill %q (id=%s, %d bytes) after %s: %w

Error message

%w: skill %q (id=%s, %d bytes) after %s: %w

What it means

Error "%w: skill %q (id=%s, %d bytes) after %s: %w" thrown in multica-ai/multica.

Source

Thrown at server/internal/daemon/daemon.go:5896

	// Resolve each missing bundle in its own request, caching it the moment it
	// arrives. The download is the slow part on jittery links, so fetching the
	// whole set in one atomic body read meant a single timeout discarded all
	// progress and the cache never converged — every dispatch re-downloaded
	// everything and timed out again. Per-skill, each download fits its own
	// size-scaled deadline and is persisted independently, so even a dispatch
	// that ultimately fails leaves the skills it did fetch cached for the next
	// one. (GitHub #4505 / MUL-3650)
	for _, ref := range misses {
		started := time.Now()
		bundle, err := d.resolveSkillBundle(ctx, task, ref)
		if err != nil {
			// Name the skill, its declared size, and how long we actually
			// waited. The bare "resolve skill bundles: context deadline
			// exceeded" this replaced was indistinguishable from a generic
			// network fault, and cost a community thread three hours of
			// guesswork (MUL-5370): size + elapsed separate "this bundle is
			// too big for the link" from "the link is dead".
			return fmt.Errorf("%w: skill %q (id=%s, %d bytes) after %s: %w",
				errSkillBundleUnavailable, ref.Name, ref.ID, ref.SizeBytes,
				time.Since(started).Round(time.Millisecond), err)
		}
		resolved[skillRefKey(bundle.Source, bundle.ID)] = bundle
	}

	skills := make([]SkillData, 0, len(task.Agent.SkillRefs))
	for _, ref := range task.Agent.SkillRefs {
		bundle, ok := resolved[skillRefKey(ref.Source, ref.ID)]
		if !ok {
			return fmt.Errorf("skill bundle missing after resolve: skill_id=%s source=%s hash=%s", ref.ID, ref.Source, ref.Hash)
		}
		skills = append(skills, bundle)
	}
	task.Agent.Skills = skills
	return nil
}

View on GitHub (pinned to 2c0912b6ec)

Solutions

  1. Clear the skill bundle cache for the affected skill and retry.

When it happens

Trigger: Thrown at server/internal/daemon/daemon.go:5896 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of multica-ai/multica@2c0912b6ec (2026-08-15). Data as JSON: /api/errors/77a32fc30f7f8f45. Report an issue: GitHub.