#github-feed

1 messages ยท Page 15 of 1

vivid lintelBOT
#

The previous fix in 867eed9 (#9697) to use the subdir in the call to bkcontenthash.Checksum was actually only a partial fix.

We need to include the subdir in the singleflight group, or we can end up colliding various operations incorrectly and getting the wrong result.

This was the probably cause of the flake in https://v3.dagger.cloud/dagger/traces/e9e01fff1fc51a3a32f60045c0e39d29?span=87...

vivid lintelBOT
#

Implement a globally accessible Dagger client.

So now, instead of passing the Client dag field from object to object, it's possible to access a single instance of the client using

io.dagger.client.Dagger.dag()

That makes it available from everywhere and simplifies the constructions of all objects.

Even better with the static import

import static io.dagger.client.Dagger.dag;

so that dag() is available. This makes the behavior of the Java SDK wa...

vivid lintelBOT
#

Currently for uploaded local dirs the UI shows the raw digest or a placeholder instead of the Host.directory call that created it.

image

This happens because the server's Host.directory actually returns a call with a custom content digest of the blob, rather than the call digest of the Host.directory call.

Now when querying the DB for a call we'll also look for spans that had the digest as an outp...

vivid lintelBOT
#

What is the issue?

Currently there is no example of attaching a docker daemon sidecar but it is a common pattern when running tests that require docker. There are also a couple of best practices when doing this that is worth documentting.

  1. It's recommended to attach a cache volume at /var/lib/docker so that docker can use overlayfs when storing data. Example:
daemon := dag.Container().From("fcr.fmr.com/docker:24-dind").
	WithEnvVariable("TINI_SUBREAPER", "true").
	WithMounte...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

Adds support for the bun.lock text format released in Bun 1.2.0 bun.sh/blog/bun-v1.2#introducing-bun-lock. This is Bun's new default.

I can't seem to get the test suite and SDK generation working, I've tried from the docs.

dagger call sdk typescript generate export --path=.

Running go test in src/core passes though.

Any advice on finishing up the PR would be appreciated, I'll look at the changie stuff and commit that shortly.

vivid lintelBOT
#

Bumps the engine group with 1 update in the / directory: github.com/dagger/testctx/oteltest.
Bumps the engine group with 1 update in the /sdk/go directory: github.com/vektah/gqlparser/v2.

Updates github.com/dagger/testctx/oteltest from 0.0.2 to 0.0.3

Commits

46f01fa update godoc, fix unit tests
1ad0d2e embed TB to ensure W is a TB
34b0863 bump testctx
See full diff in compare view

Updates `github.com/vektah/g...

vivid lintelBOT
#

Bumps the sdk-python-docker group with 1 update in the /modules/ruff/build directory: astral-sh/ruff.
Bumps the sdk-python-docker group with 2 updates in the /sdk/python/runtime directory: python and astral-sh/uv.

Updates astral-sh/ruff from 0.9.5 to 0.9.9

Release notes
Sourced from astral-sh/ruff's releases.

0.9.9
Release Notes
Preview features

Fix caching of unsupported-syntax errors (#16425)

Bug fixes

Only show...

vivid lintelBOT
vivid lintelBOT
#

I know me and @rajatjindal have started seeing this in v0.16.2, but @gmile in #8830 has also seen this.

Repeatedly running dagger function succeeds most of the times, but occasionally would fail with either of these two errors:

โœ˜ load module 1.3s
! failed to get configured module: Post "http://dagger/query": unexpected EOF
โ”‚ โœ˜ finding module configuration 1.3s
โ”‚ ! Post "http://dagger/query": unexpect...
vivid lintelBOT
#

Bumps the engine group with 1 update in the /sdk/go directory: github.com/vektah/gqlparser/v2.

Updates github.com/vektah/gqlparser/v2 from 2.5.22 to 2.5.23

Release notes
Sourced from github.com/vektah/gqlparser/v2's releases.

v2.5.23
Full Changelog: https://github.com/vektah/gqlparser/compare/v2.5.23...v2.5.23

Commits

135eef6 Fix quote handling at end of block string descriptions (#355)
94fb1f6 Bump prettier in /validator/imported in the actions...

vivid lintelBOT
#

Usage: add dagger mcp as an MCP server.

Defaults to stdio. For SSE (handy for debugging), set PORT=1234 and configure http://localhost:1234/sse.

TODO:

  • [ ] Should it be scoped per-chat somehow? Haven't found an easy way to do this with Claude Desktop. It literally runs a single MCP server for the entire time.
  • [ ] Some more prompt engineering for shell
  • [ ] Shell commands are currently trying to run e.g. wolfi instead of github.com/dagger/dagger/modules/wolfi.
    • A...
vivid lintelBOT
#

[!NOTE]
Only the last commit is relevant here, the others are part of #9738
This PR is intended to be merged after #9738

Fields can now be private (or any other visibility). No need to have them public anymore to be serialized.

All non transient/static fields will be serialized by default and registered as a field to the Dagger API.

If you want to have a field serialized but not exposed it to the API (so a user can't retrieve the value) then it needs to be annotated w...

vivid lintelBOT
#

What is the issue?

Seeing an exception printed out every time I run anything with dagger 0.16.2: RuntimeError: cannot schedule new futures after interpreter shutdown

Dagger version

dagger v0.16.2 (docker-image://registry.dagger.io/engine:v0.16.2) linux/amd64

Steps to reproduce

  1. Write the following into foo.py
#!/usr/bin/env python3
import asyncio
import dagger
from dagger import dag

async def main():
    async with dagger.connection():
        pass

asyncio....
#

Improve versioning to prepare the publication of the different components to maven central.
Related to #9194

The PR is composed of two main aspects (split in two commits, the last one is a small fix regarding the "internal" deps):

  1. update the different pom.xml to set the version based on the Dagger engine version.

    That way when bump is called, all the components of the Java SDK will get the right version. This helps to work locally with the different libraries and avoid c...

vivid lintelBOT
vivid lintelBOT
#

Closes #9723

Users have been confused by https://docs.dagger.io/cookbook/#clone-a-remote-git-repository-into-a-container-by-branch-tag-or-commit. The source of the confusion seems to be deeper than just the reproduction of the cookbook.

Basically, we lack an understanding of the security-by-design model in our docs.

This PR updates the cookbook example to differentiate the HTTP(S) and SSH based refs and also introduces a security-model page. This page is currently not linked to...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

Splitting out another seperable chunk from https://github.com/dagger/dagger/pull/9682

This updates dagql's cache to use the same "singleflight" implementation added for the local sync rework.

The idea of deduping equivalent calls is the same as the previous cachemap implementation, but with two important additional features:

  • Context cancellation is handled better.
    • Previously when calls were deduped, the "first" context was always used, which meant that if it was canceled (i.e. f...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

I don't really have context for why this was added (somewhere in https://github.com/dagger/dagger/pull/8805), but it's definitely not right, resulting in always setting a completely incorrect auth token.

See the following:

$ GIT_TERMINAL_PROMPT=0 SSH_ASKPASS=echo git credential fill <<EOF
protocol=https
host=github.com
EOF

protocol=https
host=github.com
username=Username for 'https://github.com':
password=Password for 'https://Username%20for%20...
vivid lintelBOT
#

Add introspectionJSONFile in ModuleSource so we can later remove the introspectionJSONFIle argument in the SDKs.

This changes happens because @shykes mention that it's possible to get the module TypeDef directly through the TypeDef API instead of using this introspectionJSON, so it's only an implementation details for our SDKs but not future standalone client generator.

Note: Since SDKs depends on releases dagger version, we will need to wait for a release in order to change...

vivid lintelBOT
#

What is the issue?

There is a language-native PHP example on https://docs.dagger.io/api/http#language-native-http-clients, which demonstrates how to interact with Dagger using a PHP HTTP client.

This example was created before the PHP SDK existed.

The question is whether to retain or remove it.

Argument for retain: it provides an example of communicating with Dagger using a raw GraphQL client. This could be useful for users who don't want to use the PHP SDK, who don't want to use mod...

vivid lintelBOT
vivid lintelBOT
#

What is the issue?

When running modules with dependencies in our CI pipeline, we receive excessive logging output from the printed Module.dependencies tree. This creates an issue since GitLab CI has a log output limit where content gets truncated (e.g. "Job's log exceeded limit of 4194304 bytes. Job execution will continue but no more output will be collected."). In most of our pipelines, these messages exceed this job log limit before the actual function logs even begin. This makes debu...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

What are you trying to do?

Using the Directory built in object is a bit clumsy; I'd like to create a function which iterates through the files/directories in a provided Directory argument. While it is possible to do using the entries() function; this returns an array of strings which isn't easy to work with.

I propose adding a files() function and a directories() function which would return an array of File objects for each file in the dir, or an array of Directory objects for each dir...

vivid lintelBOT
#

Wolfi made a change that causes glibc triggers to require busybox triggers having already run:
https://github.com/wolfi-dev/os/commit/8229c0379cada98fb9504dd19a068dbbe2bd0d98

This isn't obviously wrong, but our current alpine module likely runs triggers in a slightly different order and we thus end up with a glibc trigger running, trying to execute /usr/bin/sh and then failing because the busybox symlink (created in its trigger) hasn't been installed yet.

The fix here is a quick hack t...

vivid lintelBOT
#

Overview

This issue tracks the work required to ship native LLM support in the Dagger Engine, as prototyped in #9628 .

Blockers

[ ] LLM access control. All modules have access to the host's LLM endpoints. This adds enormous convenience, but it is a hole in the sandbox. LLM tokens cost real money, so there must be a protection against a module draining them - intentionally or by accident.
[ ] Hacky .env support. The current implement of .env access is hacky: 1) only works for LLM ...

vivid lintelBOT
vivid lintelBOT
#

Embed remote dependencies serving in the Connect method.
This enables clients to not depends on local dagger.json to load these dependencies, it's only requires for local one.

List of changes

  • Remote dependencies references are passed as argument to the codegen so they can be generated (we really need to split these 2 codegen commands..., will do when things around client gen are more stable)
  • Update Serve in engine to not fail if a same dependency is served multiple time...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

fixes https://github.com/dagger/dagger/issues/9794

code complete, but currently broken because directory.WithNewFile() takes a string for content and I think passing these profiles through UTF-8 encoding breaks them. Gonna switch to pulling them with curl and passing actual files around.

I'm also getting 500s for cpu profiles rn, not sure why.

taking a default 30s cpu profile

dagger call test dump --run="TestCache/TestVolume" --pkg=./core/integration --route=pprof/profile --de...
vivid lintelBOT
vivid lintelBOT
#

What are you trying to do?

It's common to protect Ollama endpoints with reverse proxies that enforce authentication via HTTP Basic auth.

Neither dagger nor the underlying openai-go client library or the go HTTP client library make provision for injection of auth credentials directly or via an additional header.

Why is this important to you?

Without explicit support, I don't see how protected Ollama instances can be used with Dagger.

How are you currently working around this?...

vivid lintelBOT
#

What happened? What did you expect to happen?

$ python3 npm_test.py 
Traceback (most recent call last):
  File "/home/kenorb/_temp/dagger/npm_test.py", line 3, in 
    import dagger
  File "/home/kenorb/.local/lib/python3.10/site-packages/dagger/__init__.py", line 1, in 
    from dagger import dagger, VERSION
  File "/home/kenorb/.local/lib/python3.10/site-packages/dagger/dagger.py", line 71
    if type(item) <> ldict_node:
                  ^^
SyntaxError: invalid syntax

$ pip3 fre...
ornate vigilBOT
#

Hello, I was trying to follow along the getting started but I'm having trouble with the very first command dagger init --sdk=python --source=./dagger.

That's is probably something in my machine state, but I'm a bit puzzled to what that could be, so I was hoping someone could shed some light.

Errors

> dagger init --sdk=python --source=./dagger
โœ˜ connect 31.3s
! start engine: new client: interrupted
โ”‚ โœ” starting engine 0.0s
โ”‚ โœ˜ connecting to engine 31.3s
โ”‚ ! new client: ...
vivid lintelBOT
#

Bumps the sdk-python-docker group with 1 update in the /modules/ruff/build directory: astral-sh/ruff.
Bumps the sdk-python-docker group with 1 update in the /sdk/python/runtime directory: astral-sh/uv.

Updates astral-sh/ruff from 0.9.9 to 0.9.10

Release notes
Sourced from astral-sh/ruff's releases.

0.9.10
Release Notes
Preview features

[ruff] Add new rule RUF059: Unused unpacked assignment (#16449)
[syntax-errors] D...

#

Bumps the sdk-java group in /sdk/java with 1 update: org.mockito:mockito-core.

Updates org.mockito:mockito-core from 5.15.2 to 5.16.0

Release notes
Sourced from org.mockito:mockito-core's releases.

v5.16.0
Changelog generated by Shipkit Changelog Gradle Plugin
5.16.0

2025-03-03 - 10 commit(s) by Brice Dutheil, Rafael Winterhalter, TDL, dependabot[bot]
Add support for including module-info in Mockito. (#3597)
Bump com.gradle.d...

vivid lintelBOT
#

Context

What is state? Itโ€™s essentially a struct that holds all the information needed for building an API query using the query builder. The current query builder doesnโ€™t deserialize from a string so we pass around the raw data instead, and only build the query when we need to resolve it.

This fundamentally changes how state is passed around. When you use a pipe (|) between functions, each of them is executed in their own goroutine, connected via an os.Pipe. So one functionโ€™s s...

ornate vigilBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

We spoke about this with Erik, Justin & Connor a few times in the last few weeks, and the consensus is that we want all Engine tests to run against dev Engines (the next version that ships), and there is marginal value in running them against an already released version.

The thinking goes that if all tests continue running the same (or better) in the next version of Dagger, then we are confident in the upcoming release.

While we might want to do the same for all other jobs in this w...

vivid lintelBOT
ornate vigilBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

Removed dependencies and stdlib. Moved builtins to the bottom.

Before

BUILTIN COMMANDS
  .core         Load any core Dagger type
  .deps         Dependencies from the module loaded in the current context
  .help         Show documentation for a command, a module, or a function
  .install      Install a dependency
  .login        Log in to Dagger Cloud
  .logout       Log out from Dagger Cloud
  .stdlib       Standard library functions
  .uninstall    Uninstall a dependen...
vivid lintelBOT
#

This was probably causing flakes, and had the potential to cause big issues. Should hopefully fix the issue noted in https://github.com/dagger/dagger/pull/9730#discussion_r1989264862.

Essentially, for remote operations we were caching twice:

  • The DagOp for the Git.tree operation (with a cache key of the git ID)
  • The underlying git operation (with a cache key of the git commit) This was very confusing to think about, and probably could have resulted in lots of weird cache issues.

...

vivid lintelBOT
#

This proposal aims to address LLM access control from https://github.com/dagger/dagger/issues/9801. However, I think it's worth considering future use cases as well - there's other cases (especially in an enterprise scenario!) where we'll want to control security per-modules:

  • allowing access to InsecureRootCapabilities, and other similar settings
  • we could even consider opening up dag.Host access safely for some some modules with this control? maybe?

With that in mind, in this i...

vivid lintelBOT
vivid lintelBOT
#

very wip, trying to get the wiring working well enough to succeed like this:

dev && with-dev dagger shell --allow-llm=all -m https://github.com/shykes/toy-programmer -c "go-program \"greet me $(date)\""

but fail like this:

dev && with-dev dagger shell -m https://github.com/shykes/toy-programmer -c "go-program \"greet me $(date)\""

currently my hunch is I'm not getting my AllowLLM flag down to nested clients, but I could be entirely wrong about that.

there was...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

What are you trying to do?

Today if you want dagger aka dagger shell to ingore the possible module in the local dir, you need to add --no-mod, there should be a shorter option available.

I propose -M since today we have -E meaning --no-exit, -M would signify --no-mod(ule)

OPTIONS
  -c, --code string                  Command to be executed
  -d, --debug                        Show debug logs and full verbosity
  -i, --interactive                  Spawn a terminal on ...
vivid lintelBOT
#

Support Java enums! ๐ŸŽ‰

Enums defined in the module must have the @Enum annotation. This allows the annotation processor to find them and register them and their possible values to the Dagger engine.

For instance:

@Enum
public enum Severity {
  LOW,
  MEDIUM,
  HIGH
}

Only a single enum can be defined with a specific name, whatever their fully qualified name. For instance it you have two enums io.dagger.module.mymodule.Severity and `io.dagger.module.foo.S...

vivid lintelBOT
#

This is a POC for fixing #5691

During buildDocker function, we check if a docker ignore file exists and use that to exclude those paths before building the container.

TODO's:

  • [ ] Verify that the name of the file follow the same pattern as supported by Docker
  • [ ] Ensure that we do not error out if dockerignore file does not exist
  • [ ] Add test cases

Alternative considerations:

I read through on how buildkit do it. while it is possible to do the same in dagger [here](http...

#

What are you trying to do?

I want to use my host's configured Git credentials within containers in Dagger.

Why is this important to you?

I want to be able to git fetch additional branches to what is already checked out within a git context. This is important for tools like SonarQube where it requires the context of the reference branch to do the analysis. There may be other use cases which require a fetch/pull from remote when working with current git directories. This is easy t...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

For less confusion and more consistency in naming, this updates the engine listener to use unix:///run/dagger/engine.sock.

For now, I'm leaving around the old unix:///run/buildkit/buildkitd.sock too to avoid backwards incompatibility. The two socks are just different listeners for the same server so there's no harm in both existing for now.

This updates everywhere I could find buildkitd.sock across Helm charts, various docs on integrations, etc. So it's worth a double check those ...

vivid lintelBOT
#

Fixes https://github.com/dagger/dagger/issues/9572

This has been flaking on our CI an annoying amount, occasionally locally too.

It seems that the problem happens specifically with a secret command provider being executed in a nested dagger exec.

The problem is that we run our nested exec session attachable server in our custom init process, which creates a race condition between different goroutines trying to wait on child processes.

Our init process obviously has to handle SIGCH...

vivid lintelBOT
vivid lintelBOT
#

What is the issue?

Expected behavior and actual behavior:

When using Dagger to publish an image to a non-existent project in Registry (eg. Harbor), the error should indicate that the project is not found (e.g., "Project not found") instead of returning a 401 Unauthorized error.

This issue seems to be a misinterpretation in Daggerโ€™s handling of the publish process. The failure should be clearly related to the non-existence of the project, not an authentication issue.

The error mess...

vivid lintelBOT
#

Bumps the sdk-java group in /sdk/java with 2 updates: org.junit:junit-bom and org.mockito:mockito-core.

Updates org.junit:junit-bom from 5.12.0 to 5.12.1

Release notes
Sourced from org.junit:junit-bom's releases.

JUnit 5.12.1 = Platform 1.12.1 + Jupiter 5.12.1 + Vintage 5.12.1
See Release Notes.
Full Changelog: https://github.com/junit-team/junit5/compare/r5.12.0...r5.12.1

Commits

ba9c9ae Release 5.12.1
e28...

vivid lintelBOT
#

Bumps the sdk-python-docker group with 1 update in the /modules/ruff/build directory: astral-sh/ruff.
Bumps the sdk-python-docker group with 1 update in the /sdk/python/runtime directory: astral-sh/uv.

Updates astral-sh/ruff from 0.9.10 to 0.11.0

Release notes
Sourced from astral-sh/ruff's releases.

0.11.0
Release Notes
This is a follow-up to release 0.10.0. The requires-python inference changes were unintentionally ...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

Still not sure about the name - call-2025-03-10 is not great - but I am more interested to check if this fixes the issue.

After all Alternative CI jobs started failing since #9673, this introduces a separate call action which is only used by these alternative CI runners. We want something simpler that has a separate lifecyle from the main call action that we use in the primary CI runners.

The problem with the current call action logging config is that GitHub Actions UI breaks, a...

vivid lintelBOT
#

In the context of client generation and various discussion with @shykes and @helderco.
We conclude that the introspectionJSON arg in SDK module should not be required since they are other ways to get a module object definition (with the typedefAPI).

So I opened a PR (https://github.com/dagger/dagger/pull/9778) to expose the introspectionJSON file with an API call, so itโ€™s up to the SDK maintainer to use it or not.
In #9778, the introspectionJSON API query is part of moduleSource but it...

vivid lintelBOT
vivid lintelBOT
#

What is the issue?

Right now if the engine is not ready by the time the CLI tries to connect it shows a scary looking error in dagger cloud.

connection error: desc = "error reading server preface: command [docker exec -i dagger-engine-v0.15.1 buildctl dial-stdio] has exited with exit status 1, make sure the URL is valid, and Docker 18.09 or later is installed on the remote host: stderr=Error: dial unix /run/buildkit/buildkitd.sock: connect: no such file or directory\nUsage:\n  dial...
vivid lintelBOT
vivid lintelBOT
#

Think I stumbled on a pretty neato pattern for module tests. Just run them with dagger run.

Might break if/when we add self-calls? Not sure. Either way, it "just worked" so rolling with it.

(Also I may be reaching by using the word "evals" here. Dunno.)

vivid lintelBOT
vivid lintelBOT
ornate vigilBOT
#

I have a container that is going to be running terraform in a monorepo where each project can use a different terraform version. I'd like to manage a cache directory to cache the terraform downloads and only run downloads again if they aren't already downloaded.

So, with my container I can do this (in python),

.with_mounted_cache("/root/.cache/terraform", dag.cache_volume("terraform"))

but how (using this same python) can I opt to do something like this?

if not clien...
vivid lintelBOT
#

What is the issue?

When loading a module that has been initialized without SDK, I get an error.

Dagger version

dagger v0.17.0-llm.10 (docker-image://registry.dagger.io/engine:v0.17.0-llm.10) darwin/arm64

Steps to reproduce

  1. dagger init
  2. dagger install github.com/shykes/hello
  3. dagger

Log output

โœ” connect 2.5s
โœ˜ load module 0.1s
! failed to serve module: input: moduleSource.asModule module name and SDK must be set
โ”‚ โœ” finding module configuration 0.0s
โ”‚ โœ˜ ...
vivid lintelBOT
#

What is the issue?

When running dagger inside a git repository, which itself is inside a dagger module, I get an error at load: moduleSource source root path "FOO" escapes context "BAR"

Dagger version

dagger v0.17.0-llm.10 (docker-image://registry.dagger.io/engine:v0.17.0-llm.10) darwin/arm64

Steps to reproduce

set -e
dagger init ./tmp/foo
git init ./tmp/foo/bar
cd ./tmp/foo/bar
dagger

Log output

Error: find module ".": input: moduleSource source root pa...
vivid lintelBOT
#

What is the issue?

Running this:

curl -fsSL https://dl.dagger.io/dagger/install.sh | DAGGER_VERSION=0.17.0-llm.10 BIN_DIR=/usr/local/bin sh

Recommends:

ZSH:

    1. Generate a _dagger completion script and write it to a file within your $FPATH, e.g.:

      dagger completion zsh > /usr/local/share/zsh/site-functions/_dagger

    2. Ensure that the following is present in your ~/.zshrc:

      autoload -U compinit
      compinit -i

    zsh version 5.7 or later is recomme...
vivid lintelBOT
vivid lintelBOT
#

Bikeshedding

Hide dagger shell?

Removed the "Experimental" annotation in dagger shell (was shown in --help) but kept it hidden to avoid confusion over using dagger shell vs dagger. May want to expose it anyway.

Hide shell builtins?

Hid the following shell builtins:

  • Filesystem navigation: .cd, .ls, .pwd
  • Scoping: .stdlib, .deps, .core
  • Cobra subprocesses: .install, .update, .upgrade, .login, .logout

REPL Experimental?

Remo...

vivid lintelBOT
#

What?

This is an experiment to see if including a module's top-level functions in .help makes sense.

Why?

Some people asked why .help didnโ€™t show top level functions. Short answer is to keep it consistent with .help since a `` is basically the first function in a module, or its entrypoint (aka, constructor).

The list of a moduleโ€™s functions comes from the object type that the entrypoint returns: the main object. This is like an object type returned by any other ...

#

putting this up as draft so maybe @jedevc can see something dumb i'm doing in here that's making this hang... i've tried invoking via shell and call plus various ways of passing the allowed module. still seems like regardless of what I do it hangs.

the daggerCliBase technique + daggerForwardSecrets thing works for the TestAPILimit test right above this one, so if it's something in the test code, it's a typo I can't see even though i'm looking right at it... one thing that's not in this dr...

vivid lintelBOT
#

โš ๏ธ Still needs quickstart guides! This PR only has placeholders for them.

Summary of Changes

  • Documentation Restructuring

    • Consolidated multiple CI quickstart pages into a single comprehensive guide
    • Removed redundant "Day 2" page
    • Reorganized sidebar for a more intuitive navigation experience
  • New Content

    • Created Examples page with real-world AI agent implementations
    • Added dedicated LLM features page documenting Dagger's AI capabilities
    • Added...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

What is the issue?

You cannot have a function name in a module that is named Query

Dagger version

dagger v0.17.0-llm.11 (docker-image://registry.dagger.io/engine:v0.17.0-llm.11) darwin/arm64

Steps to reproduce

When defining a module with the function Query the dagger develop will complete fine, but running dagger functions you get the following error:

# dagger/database-agent/internal/dagger
internal/dagger/dagger.gen.go:7977:2: query redeclared
        internal/d...
vivid lintelBOT
vivid lintelBOT
#

At the moment it's possible to write Dagger modules that wrap cloud APIs, and there are benefits to that - but it's labor-intensive. The DX is cumbersome and there are gaps, for example Dagger/Graphql types don't map directly to JSON and OpenAPI (eg. no maps).

What if we added first class to external APIs somehow? Maybe as a special kind of dependency - imagine if your dagger.json could have remote APIs as a dependency, and the engine exposed that as a dagql module? The dependency source cou...

vivid lintelBOT
#

this PR adds tests for the --allow-llm flag and its associated policies.

in the process of writing these tests I found and fixed a bug in nested client allow-llm propagation that made ExperimentalPrivilegedNesting clients always try to prompt the user and did a little refactoring to make the code easier to navigate.

requires https://github.com/dagger/dagger-test-modules/pull/8 is merged and references fixed to point at dagger/dagger-test-modules instead of cwlbraa/dagger-test-module...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

We haven't actually changed any details of the API - and it's pretty easy to give this as a fallback so that we don't need to bump any engine versions anywhere.

Noted this failure in https://github.com/dagger/dagger.io/pull/4328, where we got the following error while crawling a private module:

get module signature: input: moduleSource.asModule failed to get module runtime: failed to query git config: Unimplemented: unknown service Git
vivid lintelBOT
#

What happened? What did you expect to happen?

My antivirus (Cortex XDR) is blocking dagger based on static analysis of the executable.

This is the finding by Palo Alto's Wildfire analysis:

Sample contains hard-coded username/password brute force table | High
Malicious ELF files will use a list of username and passwords to login using brute force.

Action: Sample contains hard-coded username/password brute force table
Details: hard_coded_passwords: 1234qwer,changeme,waldo

Ru...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

What is the issue?

We're instrumenting our CI pipeline with OpenTelemetry. I expect the spans of our build test runs to map it to the parent trace-id but we observe orphaned spans.

Dagger version

sdk/go/v0.16.1

Steps to reproduce

dagger.io/client.arch: "amd64"
dagger.io/client.os: "linux"

I've attached the file to show how to reproduce the issue. The problem manifests in this test case as missing spans towards the end of the trace and disappear if we remove `dagger.WithRun...

vivid lintelBOT
vivid lintelBOT
#

Problem

When calling Host.directory() or Host.file(), I get a one-time snapshot of the file or directory, and it will never change for the whole session.

This hasn't been too much of a problem in one-off function calls with dagger call. But it becomes a major obstacle to using the Dagger Shell interactively for local dev.

Solution

Enable reloading of host files and directories in the same session.

Design

API: TBD
Shell UX: TBD

vivid lintelBOT
#

This introduces a new dagger mcp command that starts an MCP stdio server.
MCP clients can configure to exec: dagger mcp or dagger mcp -m path/to/module.

In this version, each dagger function corresponds to an MCP tool.

Caveats:

  • Currently, OPENAI_API_KEY or equivalent needs to be set as MCP is a method on the LLM object. This requirement will go away as we separate MCP from LLM.
  • Currently -s or --progress plain needs to be specified so only stderr is used, as `dagger m...
vivid lintelBOT
vivid lintelBOT
#

Problem

Secret providers currently fetch secrets in a lazy manner and have an internal cache system to avoid hammering the underlying service. Thing is that some of these providers generally emit extremely short lived keys (seconds) which for long pipelines this represents an issue as there's no current way to overcome this.

Solution

We should come up with a way so users can optionally set a TTL so secrets provider secerts are not cached indefinitely.

Questions

  • Do we want this T...
vivid lintelBOT
#

Bumps the sdk-python-docker group with 1 update in the /modules/ruff/build directory: astral-sh/ruff.
Bumps the sdk-python-docker group with 2 updates in the /sdk/python/runtime directory: python and astral-sh/uv.

Updates astral-sh/ruff from 0.9.10 to 0.11.2

Release notes
Sourced from astral-sh/ruff's releases.

0.11.2
Release Notes
Preview features

[syntax-errors] Fix false-positive syntax errors emitted for annotat...

#

Bumps the sdk-java group in /sdk/java with 2 updates: io.smallrye:smallrye-graphql-client-api and io.smallrye:smallrye-graphql-client-implementation-vertx.

Updates io.smallrye:smallrye-graphql-client-api from 2.12.1 to 2.12.2

Updates io.smallrye:smallrye-graphql-client-implementation-vertx from 2.12.1 to 2.12.2

Updates io.smallrye:smallrye-graphql-client-implementation-vertx from 2.12.1 to 2.12.2

Dependabot will resolve any conflicts with this PR as long as you don't alter it yours...

vivid lintelBOT
vivid lintelBOT
#

(This PR does a few things, still working on the description, quick PR up so I can go over the diff)

New evals system

  • Added the beginning of a new suite of evals so we can quickly get a sense of how well each model understands our tool calling scheme as we iterate on it.
    • Gemini is great for this
  • Adds an agent loop module for iterating on a system prompt based on how those evals go.
    • We maintain a README for the tool calling scheme.
    • The agent generates a syste...
#

This test has started to flake out more often recently again. Based on test output it looks like the attempt to prevent the cache mount from being pruned wasn't even actually running by the time the test containers were running (which is possible because it works by running a separate long running container in a different goroutine, so the goroutine isn't guaranteed to be running at any particular time).

This attempts to deflake by having the...

vivid lintelBOT
vivid lintelBOT
#

What are you trying to do?

When returning a custom type, or even a slice of strings. It would be great to have a native json method. Given this example return type: https://github.com/jasonmccallister/sql/blob/e1267aa57b6a46f8dd2f31aa9507c3e6584281a4/main.go#L16

In order to see the values of the fields, you would need to pipe | multiple times to see the values. Instead, if the return type supported a json

dagger call --conn=env:DB_URL list-column-details --table employe...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

Opening as a base to discuss!

x-linking https://github.com/dagger/dagger/issues/8520 for how this should interact with modules (tl;dr we can use contextual git).

Usage

# get the diff of the working directory
$ dagger core host directory --path=. as-git working diff

# get the diff to a specified target
$ dagger core host directory --path=. as-git working diff --target=

# determine if a git directory is dirty or not
$ dagger core host directory --path=. as-git working ...
vivid lintelBOT
#

What are you trying to do?

Some LLM servers that serve OpenAI endpoints do not behave the same as OpenAI when it comes to streaming, such as llama.cpp or certain Azure setups.

We should have a configuration, like an environment variable OPENAI_DISABLE_STREAMING, to not use streaming for the OpenAI client requests.

Why is this important to you?

No response

How are you currently working around this?

No response

vivid lintelBOT
#

Some engines are not able to managed tools and streaming at the same time, like llama.cpp.
This allows to define an environment variable to disable streaming:

OPENAI_DISABLE_STREAMING

This uses strconv.ParseBool so 1, t, T, TRUE, true, True will set disable the streaming while 0, f, F, FALSE, false, False will keep it.

By default streaming is not disabled.

Streaming will be disabled only if tools are used. If a query doesn't define any tools, streaming will be used.

Fixes ...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

What are you trying to do?

Would love to have more features for adding files. something like

ADD foo.tar.gz /files/foo.tar.gz

but with non-http sources that may require auth like S3.

client.Container().from("ubuntu").WithS3File("s3://bucket/file.tar.gz", "/files/foo.tar.gz")

We mainly use dagger for things like providing credentials that you can't do easily in a docker build. IMO this could be a great feature / value add for the dagger core libraries.

##...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

What is the issue?

Go codegen panics when a function is called "New"

Dagger version

dagger v0.17.1 (docker-image://registry.dagger.io/engine:v0.17.1) darwin/arm64

Steps to reproduce

  1. Create a function called "New"
  2. Try to execute

Log output

starting GOROOT= GOPATH=/go GO111MODULE=off GOPROXY= PWD=/src/vhs go list -e -f {{context.ReleaseTags}} -- unsafe
starting GOROOT= GOPATH=/go GO111MODULE= GOPROXY= PWD=/src/vhs go list -f "{{context.GOARCH}} {{context.Compile...
vivid lintelBOT
vivid lintelBOT
#

Problem

Dagger SDKs do not bundle 100% of their code and dependencies. This means that when a developer builds their module, their build downloads third party packages from various third-party registries. And, because Dagger doesn't have a distinct build phase, this happens at runtime.

As a result, it's difficult to run Dagger modules behind corporate proxies, or in airgapped environments. There is ongoing work to allow configuring various proxies, but it's a game of whack-a-mole.

...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

This was scratching an itch :laughing:

On my laptop, I use GNOME, which provides gnome-keyring for storing passwords/keys, etc - it's fairly neat, and integrates with the desktop environment to prompt for the unlock password, etc. I can use it to store encrypted passwords for things like API keys, etc.

To do this, we can integrate with libsecret, which allows accessing this info. This is pretty much as close to a standard as there is across Linux desktop environments, it's also sup...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

What are you trying to do?

I started to write a simple coding agent where I give a limited workspace to the LLM, in order to implement simple tasks.

However, the LLM often "escapes" by directly using the base Workspace container, and end up ignoring the toolset that I explicly defined.

Example agent: https://github.com/samalba/agents/blob/robot-developer/robot-developer/main.go
Base Workspace's container: https://github.com/samalba/agents/blob/b6268db7f6bc606c9f74f2d7642156a88e2a78a8/r...

vivid lintelBOT
#

In addition to user-configurable function masks, maybe we should mask some functions from core types by default. The core types (Container, Directory) have a lot of functions, so the tool count goes through the roof. Maybe some of these tools can be masked by default?

It could be a slippery slope, we could accidentally cause a "nobody will need 64k of memory" situation... But worth discussing.

Which functions should we mask?

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

โ€ฆs, code and LLMs

  • LLM is now a regular type. It can receive an environment
  • Environment: an execution context within the Dagger Engine. Basically, a sandbox.
  • Binding: a named mapping to a value, scoped to an Environment
  • Environment and Binding are now dynamic, instead of LLM.
  • Environment.with[TYPE]Binding: set a binding from from a value of type [TYPE]
  • Binding.as[TYPE]: get the value of a binding, converted to type [TYPE]
vivid lintelBOT
#

Added hostNetwork, dnsPolicy and dnsConfig as optional fields to the Helm chart.

This is needed in some cases when using kube-pod to access the dagger engine running in a Kubernetes cluster. In my case I installed RKE2, deployed the dagger helm chart and got failed to resolve image "docker.io/library/alpine:latest" errors. After digging into it a bit I found that if I set hostNetwork: true it started working

export _EXPERIMENTAL_DAGGER_RUNNER_HOST="kube-pod://...
...

...
vivid lintelBOT
#

What is the issue?

According to the documentation at https://docs.dagger.io/features/shell#modes-of-execution, Dagger Shell supports running commands from a script file. However, the command dagger script.sh fails with an "unknown command" error.

Dagger version

dagger v0.17.2 (docker-image://registry.dagger.io/engine:v0.17.2) linux/amd64

Steps to reproduce

Reproduction Steps

  1. Start with a Dagger shell container based on Alpine Linux
  2. Create a simple Dagger script fi...
vivid lintelBOT
vivid lintelBOT
#

Bumps the sdk-python-docker group with 1 update in the /sdk/python/runtime directory: astral-sh/uv.

Updates astral-sh/uv from 0.6.9 to 0.6.11

Release notes
Sourced from astral-sh/uv's releases.

0.6.11
Release Notes
Enhancements

Add dependents ("via ..." comments) in uv export command (#12350)
Bump least-recent non-EOL macOS version to 13.0 (#12518)
Support --find-links-style "flat" indexes in [[tool.uv.index]] (#12407)
Distinguish b...

vivid lintelBOT
#

Bumps the sdk-elixir group in /sdk/elixir with 1 update: ex_doc.

Updates ex_doc from 0.37.2 to 0.37.3

Changelog
Sourced from ex_doc's changelog.

v0.37.3 (2025-03-06)

Bug fixes

Handle http-equiv=refresh during Swup.js navigation
Include full error description when syntax highlighting fails

Commits

0ab3d49 Release v0.37.3
42832e2 Add banner for code highlighting exceptions, improves #2095
a2a9869 Let the browser do the reload on http-equiv ...

vivid lintelBOT
vivid lintelBOT
#

Fixes https://github.com/dagger/dagger/issues/10009

If the root command has positional arguments we check if itโ€™s an existing file. If it isnโ€™t, return an error before passing it on to dagger shell. This way we can still offer suggestions on a subcommand typo:

โฏ dagger qery
Error: unknown command or file "qery" for "dagger"

Did you mean this?
        query

exit status 1

Note that I added โ€œor fileโ€ to the error that the root command returned by default.

vivid lintelBOT
#

What are you trying to do?

There are often times when you need to see env vars that the shell has, it would be nice to have the .env command as a built-in. By default, with no arguments - entering .env would show all env vars as a list. Might be worthwhile to also support a specific var with .env FOO_BAR to eliminate calls like env | grep FOO.

Why is this important to you?

No response

How are you currently working around this?

Currently you have to use `.echo $FOO_B...

vivid lintelBOT
#

What are you trying to do?

If there is an issue with a specific model, it would be great to be able to fall back to a different model. For example I sometimes get rate limited or stuck with the following errors:

โ”‚๐Ÿค– 1.7s
โ”‚ ! received error while streaming:
โ”‚ ! {"type":"error","error":{"details":null,"type":"overloaded_error","message":"Overloaded"}}
! input: llm.withQuery.withPrompt.sync select: received error while streaming:
! {"type":"error","error":{"details":null,"type":"overlo...
vivid lintelBOT
vivid lintelBOT
#

Manual test so far by just asking an LLM what tools it has available when given an object that has a bunch of fields:

type Toy struct {
	Foo *dagger.Container
	Bar *dagger.Directory
	Baz *dagger.File
}

func New() Toy {
	return Toy{
		// Build a base container optimized for Go development
		Foo: dag.Container().
			From("golang").
			WithDefaultTerminalCmd([]string{"/bin/bash"}).
			WithMountedCache("/go/pkg/mod", dag.CacheVolume("go_mod_cache")).
			WithWorkdir("/app"),
...
vivid lintelBOT
#

What are you trying to do?

Many users have requested the ability to capture the state of a Container that has been modified through an interactive session with terminal such as in

โ‹ˆ   container | from alpine | terminal

dagger / $   apk add git
dagger / $   exit
โœ” container | from alpine | terminal 3m47s
Container@xxh3:0991463b40bf15ca

It would be amazing if you could just run

โ‹ˆ   ctr=$_
โ‹ˆ  $ctr

Why is this important to you?

No response

How are ...

vivid lintelBOT
vivid lintelBOT
#

What is the issue?

Engine which may handle prompt mode fine with LLMs like Gemini, GPT, Claude, panics when llm is run in shell mode under 0.18.0

Dagger version

0.18.0

Steps to reproduce

dagger

llm

Log output

Gemini:

time="2025-04-01T12:39:01Z" level=debug msg="handling http request" client_hostname=MacBook-Pro.local client_id=fofhdzs4ryf0z209g784traqb contentType=application/json method=POST path=/query session_id=zd8b4i9hmvirbg5onv3166e0w span=18ae7a99ac530...
vivid lintelBOT
#

What is the issue?

When creating a module that contains a reference to a time.Time Dagger cannot compile the module and fails with

dagger functions -m repro
โœ” connect 0.6s
โœ˜ load module 1.8s
! failed to serve module: input: moduleSource.asModule failed to call module "repro" to get functions: call constructor: process "go build -ldflags -s -w -o /runtime ." did not complete successfully: exit code: 1
โ”‚ โœ” finding module configuration 0.4s
โ”‚ โœ˜ initializing module 1.4s
โ”‚ ! input...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

What is the issue?

When changing model of an existing LLM instance, with llm.withModel, the underlying MCP implementation is not reconfigured to adapt to the provider. As of 0.18.0 that means the "needs system prompt" flag is not changed.

Dagger version

dagger v0.18.0 (docker-image://registry.dagger.io/engine:v0.18.0) darwin/arm64

Steps to reproduce

dagger -c 'llm --model gemini | with-model gpt-4o'

Log output

No response

vivid lintelBOT
#

The Google Gemini API returns a googleapi: Error 400 if the request includes an empty tools declaration (e.g., [{ FunctionDeclarations: [] }]). Previously, the code always included the tools parameter, even if there were no functions to declare, resulting in invalid requests.

This fix ensures the tools parameter is only sent when there is at least one valid function declaration. This change resolves the API error and aligns with Geminiโ€™s request format.

vivid lintelBOT
#

This enables the user to run dagger mcp without specifying the progress option -- and adds safeguards on user progress flags mismatch:

  • Fails if progress=tty in non-tty environment:
โžœ  dagger_dev mcp --progress tty -m github.com/shykes/hello | cat
Error: cannot use tty progress output: it interferes with mcp stdio
  • Enforce progress plain when tty=auto
โžœ  dagger_dev mcp -m github.com/shykes/hello                     
overriding 'auto' progress mode t...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

Motivations:

  • Stop setting a system prompt just for Gemini - if we need one, do it across the board in a way that's compatible with MCP.
  • Improve behavior for local models like qwen2.5-coder:14b, which don't know to call the return tool (among other things).

New SYSTEM_PROMPT tool

We don't want to rely on setting a system prompt since we don't have control over that in MCP clients like Goose, Cursor, etc. - so we only set it for Gemini, because Gemini performs pretty terr...

vivid lintelBOT
#

What is the issue?

There is much confusion for new users around with-mounted-directory, with-mounted-file vs with-directory, with-file. We often see these questions in Discord. We should doco it and also point it out right away in the CI Quickstart so folks start off on the right foot.

We should also look at updating the descriptions in the core API if they need an update to be clearer for humans and LLMs.

#general message...

vivid lintelBOT
#

Fixes https://github.com/dagger/dagger/issues/7678
Also allows nested quotes, as reported in Discord.

Before

Spread commas

โœ” container | from alpine | with-exec -- echo trivy fs --scanners vuln,misconfig,secret | stdout 2.4s
trivy fs --scanners vuln misconfig secret

Nested quotes

โœ˜ container | from alpine | with-exec -- sh -c 'echo "hello world"' | stdout
! function "with-exec": inva...
vivid lintelBOT
#

Problem

The Dagger API has 6 different reference docs:

  • GraphQL
  • Go
  • Python
  • Typescript
  • PHP
  • Java

This is very frustrating because it's impossible to link to a single page to reference a given API type or function. Instead I have to either 1) ask or guess the most relevant language, then search in the corresponding reference doc, or 2) link to the language-agnostic GraphQL reference, which is usually too low-level for most people.

Solution

Develop a single reference API refe...

vivid lintelBOT
vivid lintelBOT
#

Problem

Dagger core types (Container, Directory, File etc) could be more LLM-friendly:

  1. They have a lot of functions, which increases token cost and decreases performance.
  2. Function comments have not been optimized for clarity

Solution

  1. Look for core functions that can be hidden without hurting the LLM's ability to use them. This is a delicate balance
  2. Clean up and improve all function descriptions, using evals to measure the impact objectively
#

What is the issue?

Disk hit 100% and I was unable to clean it with dagger commands like prune. I think this is because it's trying to spin up a module?

Use "dagger [command] --help" for more information about a command.
/ # dagger core
โœ” connect 0.1s
โœ˜ loading type definitions 0.1s
! query module objects: input: failed to get schema: failed to select introspection JSON file: select: parent snapshot z62ntc4rcflkf4lixwzv8hk2b does not exist: not found

Dagger version

16.1
...

#

What is the issue?

When running a long-running function (like Service.up) in dagger shell, I can't kill that service without also killing the shell session.

Dagger version

dagger v0.18.1 (docker-image://registry.dagger.io/engine:v0.18.1) darwin/arm64

Steps to reproduce

  1. Open interactive dagger shell: dagger
  2. container | from nginx | up
  3. Go to view mode: esc
  4. Press either Ctrl-C or q

The shell session is terminated

Log output

No response

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
ornate vigilBOT
#

Sometimes we have a "job" running within dagger that needs to tidy up resources it allocates (e.g. a provisioned VM in a cloud provider, etc). If this job is terminated by dagger then that resource will be left running, which has significant cost.

The problem is that if a parallel task within dagger fails, then the job that manages that resource is killed immediately, leaving the resource allocated, and our wallets emptying.

Are there any facilities within dagger to prevent this?

Fo...

vivid lintelBOT
vivid lintelBOT
#

Problem

Visual Studio Code has extensions to show CI status directly in the editor. This is done with extensions, such as the Github Actions extension. Unfortunately the same integration is not available with Dagger Cloud. Even if my CI is configured to run Dagger, and send telemetry to Dagger Cloud, I cannot access the status of my Dagger pipelines as conveniently.

Solution

Implement a Visual Studio Code extension which integrates directly with Dagger Cloud, and shows CI status dir...

vivid lintelBOT
#

What are you trying to do?

Default values can be specified for optional arguments, e.g.

// Say hello to the world!
func (hello *Hello) Hello(ctx context.Context,
	// Change the greeting
	// +optional
	// +default="hello"
	greeting string,
	// Change the name
	// +optional
	// +default="world"
	name string,

This is visible in the help of the cli:
Image

However, the generated code only cont...

vivid lintelBOT
vivid lintelBOT
ornate vigilBOT
#

. If this job is terminated by dagger then that resource will be left running, which has significant cost.

:wave: could you please be more specific when you mention "a job terminated by dagger"?

The problem is that if a parallel task within dagger fails, then the job that manages that resource is killed immediately, leaving the resource allocated, and our wallets emptying.

As above, it'd be helpful if you could share a brief example about what you're referring to when you say ...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

What is the issue?

When a job takes longer than 5 minutes, it times out. This only affects the bun runtime. node works fine. This is due to: https://github.com/oven-sh/bun/pull/6217

Link to Discord thread

Dagger version

v0.18.2

Steps to reproduce

  /**
   * Bun timeout
   */
  @func()
  async bunTimeoutRepro(): Promise {
    return dag
      .container()
      .from("alpine:latest")
      .withExec(...
vivid lintelBOT
#

Remove the generation of the full sdk directory but instead generate a smaller bundle (4.5M).
This allows better maintenance and simpler dependency management for the user.
It also speed up the init/call time since the only required dependency is typescript.

Update TS runtime to use the bundle SDK and remove previous lib generation.

Update package.json / tsconfig.json / deno.json to use the bundled library.

Update export on the Typescript SDK to make accessible the telemetry pack...

vivid lintelBOT
vivid lintelBOT
#

Overview

When exposing a module over mcp, dagger doesn't expose the module type's actual description to the MCP client. Instead it exposes the description "odule to expose as an MCP server"

What I did

  1. Configure goose to use dagger -s mcp as a mcp server
  2. Open goose in the context of a local checkout of github.com/dagger/dagger
  3. Prompt goose: show me a table of all the tools available to you: name, desc, schema

What I expected

A table of tools including this line:
...

#

Problem

When configuring Goose to use dagger mcp as an extension, the extension fails to load with a cryptic error. It turns out that the default log output of dagger mcp is interpreted as an error, or invalid output, by Goose. Calling dagger -s mcp instead solves it. This is confusing and should not be the default outcome.

Solution

Make it so that dagger mcp works as a Goose extension / MCP server, without having to guess which flags to add.

vivid lintelBOT
#

What are you trying to do?

Access a module's own version information directly from within the module, without requiring expensive git tag fetching operations. See this conversation in discord: #maintainers message.

Specifically, we'd like the github.com/dagger/dagger/version module to be more efficient by enabling a pattern like dag.CurrentModule().Version() which would return the current version (tag or commit SHA) ...

vivid lintelBOT
#

Follow-up from https://github.com/dagger/dagger/pull/9118.

When we mixed in slashes here, we should have ensured that we updated the view. Otherwise, we could encounter the following scenario:

  • Module A uses v0.16.0 (no trailing slashes), and calls Directory.entries on a directory.
  • Module A uses v0.17.0 (has trailing slashes), and calls Directory.entries on the same directory.

If this all occurs within the same session (or across the whole engine once https://github.com/dagge...

#

Module version compatibility was introduced originally in https://github.com/dagger/dagger/issues/7640. When it was originally added, we decided that we would only add Views for fields that changed or removed - added fields wouldn't get a field.

That's because, there's actually no need from a compatibility point-of-view.

The main reason that we might want to is that it's technically possible right now to dagger develop --compat to a specific ``, and get a view of the API that is c...

#

Module version compatibility was introduced originally in https://github.com/dagger/dagger/issues/7640. Essentially, it allows modules to be served a compatible old API, while we're free to modernize the API for new + updated modules.

However, the original really only covers changes to fields:

We don't handle changes to types - I remem...

vivid lintelBOT
#

Sections in the Dagger blog are not linkable. This is annoying since some of our blog posts have a lot of rich content that we often want to reference later. For example, release announcements. Instead of linking to a particular feature in the announcement, I have to link to the whole post and say "scroll down to the part about ".

vivid lintelBOT
#

What is the issue?

Was using TAB completion in Dagger Shell and got panic when tabbing.

Dagger version

0.18.2

Steps to reproduce

dagger -M

โ‹ˆ dir=$(directory | with-new-directory

Log output

Caught panic:

runtime error: slice bounds out of range [1:0]

Restoring terminal...

goroutine 1 [running]:
runtime/debug.Stack()
	/usr/lib/go/src/runtime/debug/stack.go:26 +0x64
runtime/debug.PrintStack()
	/usr/lib/go/src/runtime/debug/stack.go:18 +0x1c
github.com/charm...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

Problem

The default verbosity of the TUI is awesome, but... it's a lot. People get overwhelmed - like running shell scripts with set -x by default. Or stracing your unix tools by default.

This is actually 2 problems in 1:

  • Problem 1: the default verbosity is too high
  • Problem 2: the lower verbosity, as implemented, is still overwhelming. We need a different kind of low-verbosity output

Solution

Default output should be a new output, with a fixed depth of 2. Basically, only ...

vivid lintelBOT
#

What is the issue?

The Env api should show installed dependencies as part of its WithXInput/WithXOutput APIs.

Curiously, after loading a module, calling .refresh will cause the env API extensions for dependencies to appear. This bug also doesn't occur when loading a module via cd, like dagger -c ".cd ..; env | .help" will show all the env extensions of ..'s installed modules.

Dagger version

dagger v0.18.2

Steps to reproduce

for example, DaggerDev, `dagger -c "env | .h...

vivid lintelBOT
#

As this is our second slowest test suite - 13m 20s P90 for the last 2 weeks - and also most likely to flake, we (@sipsma @jedevc) were curious to see how this behaves when everything is split.

FWIW, this provided some surprising results, so we want to dig a little bit more into the behaviour of this particular split:

Builds on top of:


We may not want to merge this, the primary rea...

ornate vigilBOT
#

Sorry, not sure on what the official terminology is.

By a "job" I mean a process that's launched using .with_exec([...]) (in the python API). Here's an example script. We want the use_resource job to either always execute to completion, or to be able to receive a SIGTERM and be able to handle its shutdown gracefully (obviously this would involve modification of the shell script that it's running, but hopefully this is enough of an example).


#!/usr/bin/env python3
imp...
vivid lintelBOT
#

this PR adds a selectRoot tool and the ability for Environments to specify an initial selection for an LLM. The idea here is that the default behavior for the dagger shell should be to drop the llm into the module, but also give the llm the ability to back out to the core API.

this is currently broken because i'm trying to pass a module to dagql to construct an environment, but trying to get a module in the shell context via dag.CurrentModule() chokes- presumably that function is intended...

vivid lintelBOT
ornate vigilBOT
#

Ok, now I got a better idea of what you're trying to achieve. @jedevc and @sipsma will very likely have more context but I don't think it's currently possible with Dagger's design to signal a process which is running in a with_exec step.

There might some ways you can hack it by signaling the process outside of Dagger but I'd like to see what Erik and justin have to say about this particularly around the idea that maybe something could be done by leveraging the current option we have to ...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

What is the issue?

Pardon my laziness, I will copy-paste from discord

I tried setting up dagger engine behind a k8s service (and tried to configure dagger client to connect to the dagger engine using k8s service name + port). While the connection is established, dagger builds fail with some weird error saying smth about an invalid session. I straced dagger and saw that it opens x4 connections to the dagger engine. Since k8s services are load-balanced round-robin, each connection was pro...

vivid lintelBOT
#

What is the issue?

Hi all

I'm using the latest version of Dagger engine i.e. 0.18.2

By running my module using dagger call [...] -vvvv --progress=plain --interactive tests (where [...] represent my own flags), I got the error "failed to forward exit code: failed to close terminal: EOF"

container = (
    await container.with_exec(["php", "artisan", "config:clear"])
        .with_exec(["php", "artisan", "key:generate"], expect=ReturnType.SUCCESS)
        .with_exec(["php",...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

Related to https://github.com/dagger/dagger/issues/9582

Summary of changes

  • Rename add to install for consistency.
  • Add list with optional --json option
  • Add uninstall
  • New integration tests for CLI commands
  • New WithoutClient method on ModuleSource

There are 2 other commands describe in the issue:

  • update: Not sure how to implement it properly yet, for now existing generators are bundled inside the engine as SDK methods so it's not a priority
  • `config [s...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

What is the issue?

Hi!
I discovered that some gitalias entries can fail the codegen. See the log below:

! failed to run codegen: failed to load dependencies as modules: failed to load module dependencies: select: failed to get module runtime: git config error:
! Failed to parse git config invalid format: line "\";     printf \"%s" doesn't match key=value pattern
Error: failed to generate code: input: moduleSource.withEngineVersion.generatedContextDirectory failed to run codegen: fai...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

What is the issue?

I opened this issue as the project lacks proper documentation around how to setup a dev environment for the project. I was trying to contribute to this project but unfortunately, after first PR is merged, I am unable to move forward. I tried a lot to setup a local running engine that I can debug via dlv, and failed.

A dev documentation exists, however I feel that this document expects developer to already know about the project. This is the one: https://github.com/...

vivid lintelBOT
#

Bumps the sdk-java group in /sdk/java with 2 updates: com.palantir.javapoet:javapoet and org.junit:junit-bom.

Updates com.palantir.javapoet:javapoet from 0.6.0 to 0.7.0

Release notes
Sourced from com.palantir.javapoet:javapoet's releases.

0.7.0
No documented user-facing changes

Commits

3a501f5 Release 0.7.0
af0e200 Add newlines between types in long interface lists (#196)
569df27 Excavator: Upgrades supp...

#

Bumps the sdk-python-docker group with 2 updates in the /sdk/python/runtime directory: python and astral-sh/uv.

Updates python from a866731 to 8582432

Updates astral-sh/uv from 0.6.9 to 0.6.14

Release notes
Sourced from astral-sh/uv's releases.

0.6.14
Release Notes
Python versions
The following Python versions have been added:

CPython 3.13.3
CPython 3.12.10
CPython 3.11.12
CPython 3.10.17
CPython 3.9.22

See the python-build-standalone release n...

#

Bumps the docs group in /docs with 1 update: typedoc-plugin-markdown.

Updates typedoc-plugin-markdown from 4.6.1 to 4.6.2

Release notes
Sourced from typedoc-plugin-markdown's releases.

typedoc-plugin-markdown@4.6.2
Patch Changes

Expose full declaration for returned union types (#799).
Move isOptional flag inside backTicks (#797) - thanks @โ€‹LekoArts.
Added support for TypeDoc's v0.28.2 fea...

ornate vigilBOT
#

Hello!

I currently have a pipeline that builds a multiarch image. The individual platforms take long enough that they need to be executed on two different runners, then combined into the final multiarch image in a final stage. Something akin to,

       /- publish image @ ":{commit}-amd64" -\
source                                        - create ":{commit}" from ":{commit}-armd64" and ":{commit}-amd64"
       \- publish image @ ":{commit}-arm64" -/

This pushes two ta...

vivid lintelBOT
#

Problem

When I run a command in the dagger shell, the shell stays in "edit mode" while the command is running. This creates confusion (is the command in the foreground? has it completed?), and it also makes it difficult to cancel the command: you have to press esc to switch to "view mode", then ctrl-C.

Solution

Change the dagger shell to switch to "view mode" while a command is running.

vivid lintelBOT
#

This has been happening a lot lately.

Example: https://v3.dagger.cloud/dagger/traces/e8c0fc90b5ecaa75eeeba4ce885ead5b?span=4c77921594061dd0&logs#4c77921594061dd0:L155

Primary error seems to be:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:3.1.2:install (default-install) on project dagger-sdk-parent: Failed to install metadata io.dagger:dagger-sdk-parent/maven-metadata.xml: Could not parse metadata /root/.m2/repository/io/dagger/dagger-sdk-parent/maven-met...
#

This started flaking occasionally a few days ago. First occurrence I found is at https://v3.dagger.cloud/dagger/traces/99b8612ffeb0bd86a718c0d3164e0ffb?span=c7b32ffabfbd2e59

Error looks like

failed to check if module already exists: input: moduleSource failed to stat local path: failed to stat path: failed to get requester session: session for "1s13ivxachyz418qvzs4dtfoh" not found

It's a bit of a mystery since the TestSystemCACert tests run against their own isolated nested engine...

vivid lintelBOT
#

Draft so I can test the rough fix here in CI for a few rounds to verify it works and doesn't hurt performance. Will cleanup if all looks good.


Noticed this while spelunking around the code a bit. There's a semblance of a chance this could explain https://github.com/dagger/dagger/issues/10157, but far from guaranteed to be the root cause there. Seems worth a fix either way.

Theoretically, before this change it seems possible for the session attachables of a nested client to not be...

vivid lintelBOT
#

Change in our fork: https://github.com/dagger/buildkit/commit/6f5903130a809fae40f475a7f9f256078f1131ed

Reasonably confident this fixes the problem in https://github.com/dagger/dagger/issues/10157, but leaving that one open until we haven't seen it for a while.

Also suspect this is most likely the culprit behind https://github.com/dagger/dagger/issues/9557, but again won't know for sure until we haven't seen the problem in a while.

  • cc @vito the returnError mystery may finally be sol...
vivid lintelBOT
vivid lintelBOT
#

What is the issue?

When passing an uninitialized object to a method, it gives a 400 GraphQL error without a clear error message of what went wrong.

Code:

@object()
export class TSProject implements Project {
    source: Directory
    ctr: Container
    packageCache: CacheVolume;
    buildCache: CacheVolume;
    readonly projectDir = "/app/";
    constructor(
        @argument()
        source: Directory
    ) {
        this.source = source;
        this.ctr = dag.node().withPnpm()...
vivid lintelBOT
#

Partial fix for https://github.com/dagger/dagger/issues/10129, by improving the error message - it still doesn't work, but actually informs the user that it isn't supported.

Previously, we were often returning invalid terminals from the OpenTerminal function. This could happen because gRPC does not actually wait for the call to Session to complete - instead, any errors returned (like the one that reports that the user can't open a terminal in a --progress=plain session) is actually r...

#

Technically, we are error handling, we should take these errors and print them nicely, and exit correctly.

We've had bug reports that mention the panic, and interpret it as being a dagger internal error. This seems fair, panic should be reserved for exceptional + unrecoverable scenarios (not ones that can be caused by users by passing bad input, like trying to execute a program that's not in the PATH).

vivid lintelBOT
#

Follow-up to https://github.com/dagger/dagger/pull/10162

Still saw an occurrence of the flake, but this time it's because the healthcheck failed 2 times in a row rather than closed early due to a bug: https://v3.dagger.cloud/dagger/traces/64ca948ee08ce288105b158ab8889321?span=8960846c5fe9627d&logs#8960846c5fe9627d:L245

Rather than try to play a game of tuning these, I'm trying out disabling them entirely: https://github.com/sipsma/buildkit/commit/03396bcf635a07d4e0ad7b50dab1a28d71f8f132...

vivid lintelBOT
#

There's currently a bug in v0.18.3 that frequently causes the publish job to error out due to some unhandled cases involving cross-session cache hits and +private state.

This will be fixed separately, but in order to avoid this problem during the release of v0.18.4 this change moves the Publish job to run on a single-tenant engine so that it doesn't have any other sessions connected that can cause the bug.

Generally speaking, running the Publish job on a single-tenant engine is probab...

vivid lintelBOT
#

Our publish job has been failing most of the time on main after upgrading to v0.18.3 (but usually passed on a re-run) Was able to repro locally and realized it has to do with getting cache hits on module objects that have private state. The engine doesn't know about private fields so it can hold cache refs open to them, which opens the door for getting a cache hit on an object with a local dir stored in private state, the original cache ref for that local dir being released, resulting in it b...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

This PR extends dagql views (added way back in https://github.com/dagger/dagger/pull/7759) to also work with field args, instead of just with the fields themselves.

The motivation for this is that it was getting increasingly complex to make backwards compat changes for code. For example, to remove an arg, it was required to make a full copy of the field, and to re-declare all the args. This was error-prone, and didn't really convey the intention at a glance.

To be able to simplify thi...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

Replacement for https://github.com/dagger/dagger/pull/10175 as this PR solves the problem there plus some more general ones w/ a completely different approach.

New case of contextual dirs causing cache problems was noticed by @cwlbraa where he was hitting old local code when running integ tests w/ test specific

  • See TestCrossSessionContextualDirChange integ test added in this PR for a minimal repro of that situation

The only real fix for this is to tackle the problem of contextual...

vivid lintelBOT
vivid lintelBOT
#

It makes sense that the --no-mod flag should be allowed everywhere that the --mod flag is.

The main rationale for this was around dagger query, where it wasn't possible to run without attempting to load the current directory. But it also extends to other commands.


I originally raised this in discord [here](#maintainers message):

@jedevc โ€” 25/03/2025, 17:42

question around --no-mod - I assume it s...

vivid lintelBOT
vivid lintelBOT
#

What is the issue?

$ dagger <<-EOF
container | from alpine | with-env-variable VAR "--hello" | with-exec -- echo HELLOOOOO | stdout
EOF
โœ” connect 0.2s
โœ” loading type definitions 0.2s

Setup tracing at https://dagger.cloud/traces/setup. To hide set DAGGER_NO_NAG=1
Error: function "with-env-variable": unknown flag: --hello

Usage: with-env-variable   [--expand]
โ†‘16:01:06 [1]
$ dagger <<-EOF
container | from alpine | with-env-variable VAR " --hello" | with-exec -- echo HELLOOO...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

What are you trying to do?

I'm running source.AsGit().WithAuthToken().Tags(ctx) and realized it won't show the remote tags because it doesn't do a fetch. Would it be possible to add a AsGit().Fetch(branch or all)?

Why is this important to you?

The AsGit is very useful but I can't use it because I need to fetch before doing much with the repo. The fetch itself requires a PAT so I have to set up all of that whereas AsGit().WithAuthToken() handles it.

How are you current...

vivid lintelBOT
vivid lintelBOT
#

What happened? What did you expect to happen?

I'm new to dagger and trying to figure out some odd behavior.

I have a Dagger module that calls an API endpoint to create something, when the module calls the API endpoint directly like so:

package main

func (r *MyModule) CreateSomething(ctx context.Context, token *dagger.Secret, environment, version string) (string, error) {
	apiClient, err := api.NewClient(ctx, token, environment)
	if err != nil {
		return "", fmt.Errorf("create cl...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

What is the issue?

I am seeing a strange behavior when using a forked repo as a ref. When I point a Directory arg to git fork, it sets the origin to upstream instead of the fork. Even if I explicitly tell it to use my default branch like github.com/private_org/repo.git#main it points to github.com/upstream_org/repo.git.

but,

If I use a branch other than default, it sets the right remote github.com/private_org/repo.git#custom_branch works.

Dagger version

dagger v0.18.3

#...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

Module initialization (when we ask the runtime for what type defs it has) previously got just enough data to support checking the current module name, but basically nothing else. This is because the module is not yet fully constructed during initialization.

This update results in as much of the module being available during init as is possible. This should cover various cases like:

  1. access to dag.CurrentModule().Source()
  2. creating execs during module initializtion (which previously p...
vivid lintelBOT
#

What is the issue?

I don't know if the Rust SDK was meant to be cross compatible (Unix & Windows) but it would be useful to allow the SDK be able to compile in Windows by separating the following configuration below referenced for Unix and Windows.

The issue is that the dagger-sdk crate is attempting to use Unix-specific functionality (os::unix::prelude::PermissionsExt and set_mode on Permissions) on a Windows platform. This won't work because the unix module within os is c...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

Bumps the sdk-java group with 4 updates in the /sdk/java directory: io.smallrye:smallrye-graphql-client-api, io.smallrye:smallrye-graphql-client-implementation-vertx, com.palantir.javapoet:javapoet and org.junit:junit-bom.

Updates io.smallrye:smallrye-graphql-client-api from 2.12.2 to 2.13.0

Updates io.smallrye:smallrye-graphql-client-implementation-vertx from 2.12.2 to 2.13.0

Updates `io.smallrye:smallrye-...

#

Bumps the docs group in /docs with 1 update: typedoc.

Updates typedoc from 0.28.2 to 0.28.3

Release notes
Sourced from typedoc's releases.

v0.28.3
Bug Fixes

@inline now functions when referencing tuple types, #2932.
@link links to the current page are now rendered, #2934.
@includeCode now supports regions in TypeScript files with .mts and .cts file extensions, #2935.
Aliased symbols (re-exports) are now resolved before checking if they are exclud...

#

Bumps the sdk-elixir group in /sdk/elixir with 1 update: credo.

Updates credo from 1.7.11 to 1.7.12

Release notes
Sourced from credo's releases.

v1.7.12
Check it out on Hex: https://hex.pm/packages/credo/1.7.12

Fix compatibility & compiler warnings with Elixir 1.19 (dev)
Provide :column on all checks
Fix check docs in other project's documentation
Credo.Check.Refactor.DoubleBooleanNegation fixed false positive
Credo.Check.Readability.NestedFunction...

#

Bumps the sdk-python-docker group with 1 update in the /modules/ruff/build directory: astral-sh/ruff.
Bumps the sdk-python-docker group with 1 update in the /sdk/python/runtime directory: python.

Updates astral-sh/ruff from 0.11.2@sha256:5de67d7c9f5fcb98109623ebbc9b41e20f4e6f80ca61442efd0ff2d469e151fe to sha256:f2491968bb001af02259a629f7edcf26bc4811a7a43c51ae18270087035478ac

Changelog
Sourced from astral-sh/ruff's changelog.

Changelog
0.11.6
Preview f...

vivid lintelBOT
#

Saw this happen one time so far: https://v3.dagger.cloud/dagger/traces/cdca068a2bc3f4a24669294d6d55b6a2?span=9bb360c22dab5941&logs

time="2025-04-19T01:42:46Z" level=debug msg="merging edges" dest_index=2 dest_vertex_digest="sha256:25054e2b8aa9a0a72570be4927725d143b9efc775b097111ab630993fc648079" dest_vertex_name="npm pkg set type=module" source_edge_index=2 source_edge_vertex_digest="sha256:8e05840352c710528a008aaf070ad90ea1c78ac5b3ae04d2ae04736a0e93df6b" source_edge_vertex_name="npm pkg...
vivid lintelBOT
vivid lintelBOT
#

fixes this scenario:

โ”‚๐Ÿค– 0.5s โ—† Input Tokens: 3,059 โ—† Output Tokens: 25
โ”‚ $ .withExec(args: ["go", "version"]): Container! 0.0s CACHED
โ”‚
โ”‚๐Ÿค– 0.6s โ—† Input Tokens: 3,128 โ—† Output Tokens: 17
โ”‚ โœ” .stdout: String! 0.0s
โ”‚
โ”‚๐Ÿค– A Golang container was created and the command go version was run. The output is:
โ”‚ โ”ƒ
โ”‚ โ”ƒ go version go1.24.2 linux/amd64
โ”‚ โ”ƒ
โ”‚ โ”ƒ If you need to run additional commands or inspect this container further, let me know!
โ”‚ โ”ƒ 1.0s
! returned error 422: {"data":null...
vivid lintelBOT
#

Have been seeing this flake multiple times a week: https://v3.dagger.cloud/dagger/traces/dafefd720f702dc6e87a46fdbcaf976b#fdf958e9fef4c3cb:EL1

The elixir sdk dev module (loaded as part of the overall dagger-dev module) errors out w/ OS monotonic time stepped backwards.

Have no idea what to make of it yet, could be a genuine infra issue that elixir is just reporting or some issue w/ elixir itself? cc @wingyplus in case you have any ideas

#

When running Dagger with Kata Containers one will want to avoid using virtio-fs and direct attach a block volume to the container, which will then require e2fsprogs in order to properly mkfs.XYZ ... the block device before getting it to actually be mounted and used ae /var/lib/dagger.

Of course, this is far from a "normal" use-case, but right now there's no way to use the Dagger engine without either modifying Kata Containers itself or re-building the Dagger image ... and both option...

vivid lintelBOT
#

Fixes https://github.com/dagger/dagger/issues/10151

withModel was not loading env vars from the main client in the same way that the llm constructor was, so calling withModel didn't result in any auth being loaded along with the reset model.

This updates withModel to load the router in the same way as the constructor so API keys are loaded consistently.


Tested manually so far since I don't believe our integ tests support any actual calls with real API auth keys.

T...