Skip to content

feat: add per task prop selection - #109

Merged
pedronauck merged 5 commits into
mainfrom
pn/task-props
Apr 17, 2026
Merged

pedronauck merged 5 commits into
mainfrom
pn/task-props

Conversation

@pedronauck

@pedronauck pedronauck commented Apr 17, 2026 •

Copy link
Copy Markdown
Member

Summary by CodeRabbit

  • New Features
    • Repeatable CLI flag to specify per-task runtime overrides (IDE, model, reasoning effort) via key=value rules; help text updated.
    • Interactive start workflow form to configure overrides by task type or task ID.
    • Extension hook to customize per-task runtime resolution.
  • Behavior Change / Safety
    • Execution and hooks now guard against and reject late mutations to resolved task runtime.
  • UI / Events
    • Event payloads and UI timeline now surface per-job runtime metadata (IDE, model, reasoning effort).

@pedronauck pedronauck self-assigned this Apr 17, 2026
@coderabbitai

coderabbitai Bot commented Apr 17, 2026 •

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: a630831d-450d-41b9-abee-fd9be4816a65

📥 Commits

Reviewing files that changed from the base of the PR and between d0404e9 and 5960802.

⛔ Files ignored due to path filters (2)
  • .codex/ledger/2026-04-17-MEMORY-daemon-architecture.md is excluded by !**/*.md
  • .codex/ledger/2026-04-17-MEMORY-pr109-ci-fix.md is excluded by !**/*.md
📒 Files selected for processing (2)
  • internal/core/workspace/config_test.go
  • internal/core/workspace/config_validate.go
🚧 Files skipped from review as they are similar to previous changes (2)
  • internal/core/workspace/config_test.go
  • internal/core/workspace/config_validate.go

Walkthrough

Adds per-task runtime overrides (IDE, Model, ReasoningEffort) configurable via CLI flag, interactive form, workspace config, and extension hook; resolves and applies these overrides during planning and execution with guards against post-resolution mutation and UI/event propagation.

Changes

Cohort / File(s) Summary
CLI: flags & wiring
internal/cli/commands.go, internal/cli/task_runtime_flag.go, internal/cli/task_runtime_flag_test.go, internal/cli/testdata/start_help.golden
Adds repeatable --task-runtime flag with CSV-style key=value parsing, validation, serialization, and help text; tests parsing and quoted CSV handling.
CLI: interactive form & inputs
internal/cli/form.go, internal/cli/form_test.go, internal/cli/task_runtime_form.go
Adds form flow to collect per-type/per-task runtime editors, prefill from configured rules, toggles via define-task-runtime, refactors field insertion helpers, and adds tests for preselection and field presence.
CLI: state & workspace wiring
internal/cli/state.go, internal/cli/workspace_config.go, internal/cli/root_test.go, internal/cli/workspace_config_test.go
New state fields for configured vs execution rules, helper to combine them, workspace defaults wiring, and tests ensuring merge/flag precedence and max-retries behavior.
Core model: runtime rules & integration
internal/core/model/task_runtime.go, internal/core/model/runtime_config.go, internal/core/model/preparation.go, internal/core/model/hooks.go, internal/core/model/model_test.go
Introduces TaskRuntimeRule/TaskRuntime types, cloning, matching, RuntimeConfig.TaskRuntimeRules, RuntimeForTask resolution (type then id), clone semantics, and helper to wait for observer hooks; adds tests for resolution semantics.
Planning: resolve & hooks
internal/core/plan/prepare.go, internal/core/plan/prepare_test.go
Resolves per-task runtime during planning, dispatches plan.pre_resolve_task_runtime hook, validates runtimes (compatibility with AddDirs), prevents post-prepare runtime mutation, and updates tests for hook interactions.
Extension API & SDK
internal/core/extension/manifest.go, internal/core/extension/manager.go, sdk/extension/types.go, sdk/extension/hooks.go, sdk/extension/handlers.go, sdk/extension/compat_test.go, sdk/extension/smoke_test.go
Adds plan.pre_resolve_task_runtime hook constant, manager waiter method, new SDK types (TaskRuntime, TaskRuntimeTask, TaskRuntimeRule), typed payload/patch and registration helper, and compatibility tests.
Execution: guards, propagation & results
internal/core/run/executor/execution.go, internal/core/run/executor/execution_test.go, internal/core/run/executor/runner.go, internal/core/run/executor/hooks.go, internal/core/run/executor/result.go, internal/core/run/executor/runtime_guard_test.go, internal/core/run/executor/execution_acp_test.go
Snapshots workflow-prepared state to guard run.pre_start and job.pre_execute from mutating runtime fields; waits for observer hooks on finalize; propagates IDE/Model/ReasoningEffort through hook conversions, lifecycle events, results, and tests.
ACP & client wiring
internal/core/run/internal/acpshared/command_io.go, internal/core/run/internal/acpshared/command_io_test.go
createACPClient now derives IDE/Model/ReasoningEffort from per-job runtime with fallback to global config; adds test asserting client config uses per-job values.
Runtime fields across run/shared & UI
internal/core/run/internal/runshared/config.go, internal/core/run/ui/types.go, internal/core/run/ui/model.go, internal/core/run/ui/update.go, internal/core/run/ui/timeline.go, internal/core/run/ui/view_test.go
Adds TaskRuntimeRules and per-job IDE/Model/ReasoningEffort into run/shared Config/Job and UI message types; timeline/UI prefer current-job runtime values; updates tests.
Workspace config: types, merge, validate
internal/core/workspace/config_types.go, internal/core/workspace/config_merge.go, internal/core/workspace/config_validate.go, internal/core/workspace/config_test.go
Adds start.task_runtime_rules TOML mapping; implements merging/deduplication by normalized Type, validation (disallow id, require type, require at least one override), IDE/model/reasoning checks, and tests for validation errors.
Events & payloads
pkg/compozy/events/kinds/job.go, pkg/compozy/events/event_test.go
Extends job queued/started event payloads with IDE, Model, ReasoningEffort, and AccessMode; updates event round-trip tests.
Misc tests & helpers
many _test.go files referenced above
Adds/extends tests for parsing, resolution, hook behavior, guards, and execution retry behavior.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant CLI
    participant Form
    participant Planner
    participant HookExt
    participant Executor
    participant Agent

    User->>CLI: compozy start --task-runtime type=frontend,model=gpt-5.4
    CLI->>Form: optionally run collectStartTaskRuntimeForm
    Form->>CLI: return executionTaskRuntimeRules
    CLI->>Planner: prepare workflow + task-runtime rules
    Planner->>HookExt: dispatch plan.pre_resolve_task_runtime (per task)
    HookExt-->>Planner: optional TaskRuntimePatch
    Planner->>Planner: RuntimeForTask(target) (type then id)
    Planner->>Executor: hand off prepared jobs with resolved IDE/Model/ReasoningEffort
    Executor->>Executor: snapshot prepared state
    Executor->>HookExt: dispatch run.pre_start (guarded)
    HookExt-->>Executor: possibly mutate (rejected if runtime changed)
    Executor->>Agent: createACPClient(job) using per-job runtime
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Possibly related PRs

  • feat: add config.toml #40: Touches internal/cli/form.go and related form input handling—overlaps with the CLI form refactor and new form flow in this PR.
  • refactor: improve packages #70: Modifies newStartCommandWithDefaults / start command wiring; relevant to this PR’s addition of the --task-runtime flag.
  • feat: extension improvements #83: Adds the same plan.pre_resolve_task_runtime hook/types and extension plumbing; strongly related to extension/hook changes here.
🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 2.56% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title 'feat: add per task prop selection' is vague and does not clearly convey the main changes. While it touches on a real aspect of the changeset (task-level property selection), it uses generic terminology ('prop selection') that obscures the specific feature being added (task runtime overrides with IDE, model, and reasoning effort configuration). Consider using a more descriptive title such as 'feat: add per-task runtime override rules' or 'feat: support task-specific IDE/model/reasoning-effort selection' to better communicate the feature's purpose.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch pn/task-props

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 10

🧹 Nitpick comments (3)
internal/cli/task_runtime_flag.go (1)

141-144: Consider simplifying the stringPointer helper.

The intermediate variable cloned is unnecessary since value is already a copy (string is passed by value in Go).

♻️ Suggested simplification
 func stringPointer(value string) *string {
-	cloned := value
-	return &cloned
+	return &value
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/cli/task_runtime_flag.go` around lines 141 - 144, The helper
function stringPointer unnecessarily uses an intermediate variable; simplify it
by returning the address of the incoming string parameter directly (i.e., modify
the stringPointer function to take value string and return &value) so you remove
the cloned variable while preserving semantics and avoiding extra allocation.
internal/core/model/task_runtime.go (1)

160-166: Unexpected trimming in cloneOptionalString.

The cloneOptionalString function trims whitespace during cloning (line 164), which is a side effect that might be unexpected for a function named "clone". While this is likely intentional for normalization, consider either:

  1. Renaming to cloneAndTrimOptionalString for clarity, or
  2. Adding a brief comment explaining the trimming behavior
📝 Suggested documentation improvement
+// cloneOptionalString returns a deep copy of the string pointer with
+// whitespace trimmed. The trimming normalizes selector/override values
+// during rule cloning.
 func cloneOptionalString(value *string) *string {
 	if value == nil {
 		return nil
 	}
 	cloned := strings.TrimSpace(*value)
 	return &cloned
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/core/model/task_runtime.go` around lines 160 - 166, The function
cloneOptionalString currently trims whitespace while cloning which is surprising
given its name; rename the function to cloneAndTrimOptionalString (and update
every call site) to make the behavior explicit, or alternatively keep the name
but add a short comment above cloneOptionalString stating that it trims
whitespace as part of cloning; whichever you choose, ensure the function
signature and behavior remain unchanged and update all references to the new
name if you rename it.
internal/cli/task_runtime_form.go (1)

364-388: Redundant trimming logic in formatBaseTaskRuntime.

Lines 368-374 contain redundant operations: label is already set from state.ide and trimmed, then checked and re-trimmed unnecessarily.

♻️ Suggested simplification
 func formatBaseTaskRuntime(state *commandState) string {
 	if state == nil {
 		return ""
 	}
-	label := strings.TrimSpace(state.ide)
-	if label != "" {
-		label = strings.TrimSpace(label)
-	}
-	if display := strings.TrimSpace(label); display != "" {
-		label = display
-	}
+	label := strings.TrimSpace(state.ide)
 	modelName := strings.TrimSpace(state.model)
 	reasoning := strings.TrimSpace(state.reasoningEffort)
 	parts := make([]string, 0, 3)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/cli/task_runtime_form.go` around lines 364 - 388, The function
formatBaseTaskRuntime contains redundant trimming and reassignment for label:
after setting label := strings.TrimSpace(state.ide) the code re-trims and uses a
temporary display variable; remove the extra checks and trims (the second
TrimSpace and the display variable) and simply use the already-trimmed label
when deciding whether to append it to parts, leaving the rest (modelName,
reasoning, parts assembly) unchanged; update references to label, state.ide, and
ensure modelName and reasoning behavior is preserved.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@internal/cli/form.go`:
- Around line 35-42: The current branch flips
state.replaceConfiguredTaskRunRules and clears state.executionTaskRuntimeRules
whenever inputs.defineTaskRuntime is false, which causes existing
workspace-configured rules or explicit --task-runtime flags to be lost if the
user declines the extra form; change the logic in the start-flow handlers (the
block using state.kind == commandKindStart, the collectStartTaskRuntimeForm
call, and the other similar spots) so that you only mutate
state.replaceConfiguredTaskRunRules or clear state.executionTaskRuntimeRules
when the user explicitly chooses to define/replace per-task rules (i.e., when
inputs.defineTaskRuntime is true and/or when collectStartTaskRuntimeForm returns
a positive confirmation), and do not change or clear those fields when the user
declines the form; apply the same fix to the other occurrences mentioned (the
blocks around state.taskRuntimeRules() usages).

In `@internal/cli/root_test.go`:
- Around line 657-673: Wrap the existing
TestAddCommonFlagsUseResilientRetryDefaults body in a t.Run subtest with a
"Should ..." name (e.g., t.Run("Should use resilient retry defaults", func(t
*testing.T) { ... })), move the t.Parallel() call into that subtest, and keep
all existing assertions and lookups (state := newCommandState, cmd :=
newTestCommand, checks for state.maxRetries and flag.DefValue) unchanged inside
the subtest so the test complies with the t.Run("Should...") pattern.

In `@internal/cli/state.go`:
- Around line 73-74: The defaultMaxRetries constant currently set to 2 causes
non-idempotent jobs to be retried by default; change defaultMaxRetries to 0 (no
retries) and ensure retry behavior is opt-in via the existing CLI retry flag or
configuration (update any code paths referencing defaultMaxRetries such as where
retries are parsed/applied and any help text or tests); specifically update the
constant defaultMaxRetries and adjust related logic that merges defaults into
actual retry settings so retries only occur when the user explicitly enables
them (also update any unit tests or docs that assume a default of 2).

In `@internal/cli/workspace_config_test.go`:
- Around line 229-279: The test
TestApplyWorkspaceDefaultsKeepsConfiguredTaskRuntimeRulesAndBuildConfigAppendsCLIOverrides
is not hermetic because applyWorkspaceDefaults reads the global config from
HOME; make the test isolated by setting HOME to a temp directory before calling
state.applyWorkspaceDefaults (or use t.Setenv("HOME", tmpDir) if available) and
restore/cleanup after, or alternatively remove t.Parallel() to avoid concurrent
interference; ensure you perform this HOME isolation before calling
writeCLIWorkspaceConfig/chdirCLITest and before state.applyWorkspaceDefaults so
configuredTaskRuntimeRules only reflects the test fixtures.

In `@internal/core/run/executor/execution.go`:
- Around line 220-222: finalizeExecution() should not use the caller's
cancelable ctx when waiting for observer hooks because that causes shutdown
steps to be skipped on cancellation; change the call to
model.WaitForObserverHooks to use a bounded shutdown context that ignores the
original ctx (e.g., create a new context via
context.WithTimeout(context.Background(), <reasonableDuration>) and defer
cancel()) and pass that to model.WaitForObserverHooks along with
internalCfg.RuntimeManager so the rest of finalization (run.pre_shutdown,
terminal events, task meta refresh, sound notification) still runs even if the
run ctx is canceled.

In `@internal/core/run/executor/runner.go`:
- Around line 205-208: jobRuntimeChanged currently trims runtimes so a hook can
make whitespace-only changes (e.g., "codex" -> "codex ") and bypass the guard
before applyHookModelJob writes the raw value; update jobRuntimeChanged to treat
whitespace-only edits as a runtime mutation by comparing both the trimmed values
and the raw values (or explicitly checking if rawBefore != rawAfter even when
trimmedBefore == trimmedAfter) and return true for any difference, then keep
applyHookModelJob as-is; make the same change for the other occurrence
referenced (lines 272-275) so whitespace-only changes cannot slip through.

In `@internal/core/run/internal/acpshared/command_io_test.go`:
- Around line 186-194: The test TestCreateACPClientUsesPerJobRuntimeWhenPresent
must not call t.Parallel() because SwapNewAgentClientForTest mutates
package-global constructor state; remove the t.Parallel() invocation from that
test (or convert the test into a non-parallel setup section that calls
SwapNewAgentClientForTest and then runs parallel subtests with t.Run +
t.Parallel() if needed) so that the global factory swap performed by
SwapNewAgentClientForTest is not observed by other parallel tests.

In `@internal/core/workspace/config_test.go`:
- Around line 361-394: The tests TestLoadConfigParsesStartTaskRuntimeRules (and
the similar one at 434-452) call LoadConfig which merges global HOME config, so
isolate the test from a developer's ~/.compozy/config.toml by invoking
isolateWorkspaceConfigHome(t) (or stubbing osUserHomeDir) before calling
LoadConfig, and remove t.Parallel() from the test since
isolateWorkspaceConfigHome requires non-parallel execution; update both test
functions to call isolateWorkspaceConfigHome(t) at the start (or set a temporary
HOME via osUserHomeDir stub) and then call LoadConfig as before.

In `@pkg/compozy/events/event_test.go`:
- Around line 141-142: Rename the failing subtest names that use plain strings
to the required t.Run("Should...") pattern: update the subtest names currently
written as "job queued" and "job started" (and the other case at lines ~159-160)
to descriptive "Should..." names (e.g., "Should queue job" and "Should start
job") wherever t.Run is invoked in the event tests that construct
kinds.JobQueuedPayload / kinds.JobStartedPayload so they comply with the
enforced naming rule.

In `@sdk/extension/compat_test.go`:
- Around line 37-38: Rename the test case name fields that feed into t.Run to
follow the mandated "Should..." pattern: update the case with public:
extension.TaskRuntime{} (currently name "TaskRuntime") to a "Should..."
description (e.g., "Should retain TaskRuntime compatibility") and update the
case with public: extension.TaskRuntimeTask{} (currently name "TaskRuntimeTask")
to a "Should..." description (e.g., "Should retain TaskRuntimeTask
compatibility"); these name values are the tc.name passed into t.Run(tc.name,
...) so ensure the name fields in the test cases slice are changed accordingly.

---

Nitpick comments:
In `@internal/cli/task_runtime_flag.go`:
- Around line 141-144: The helper function stringPointer unnecessarily uses an
intermediate variable; simplify it by returning the address of the incoming
string parameter directly (i.e., modify the stringPointer function to take value
string and return &value) so you remove the cloned variable while preserving
semantics and avoiding extra allocation.

In `@internal/cli/task_runtime_form.go`:
- Around line 364-388: The function formatBaseTaskRuntime contains redundant
trimming and reassignment for label: after setting label :=
strings.TrimSpace(state.ide) the code re-trims and uses a temporary display
variable; remove the extra checks and trims (the second TrimSpace and the
display variable) and simply use the already-trimmed label when deciding whether
to append it to parts, leaving the rest (modelName, reasoning, parts assembly)
unchanged; update references to label, state.ide, and ensure modelName and
reasoning behavior is preserved.

In `@internal/core/model/task_runtime.go`:
- Around line 160-166: The function cloneOptionalString currently trims
whitespace while cloning which is surprising given its name; rename the function
to cloneAndTrimOptionalString (and update every call site) to make the behavior
explicit, or alternatively keep the name but add a short comment above
cloneOptionalString stating that it trims whitespace as part of cloning;
whichever you choose, ensure the function signature and behavior remain
unchanged and update all references to the new name if you rename it.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: b8d6f0af-9c95-4475-9332-a9abbcd60cee

📥 Commits

Reviewing files that changed from the base of the PR and between ccf8f6e and 89571d6.

⛔ Files ignored due to path filters (50)
  • .agents/skills/qa-execution/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-execution/assets/issue-template.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-execution/assets/verification-report-template.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-execution/references/checklist.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-execution/references/e2e-coverage.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-execution/references/project-signals.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-execution/references/web-ui-qa.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-execution/scripts/discover-project-contract.py is excluded by !.agents/**
  • .agents/skills/qa-report/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-report/assets/issue-template.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-report/references/bug_report_templates.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-report/references/figma_validation.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-report/references/regression_testing.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-report/references/test_case_templates.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-report/scripts/create_bug_report.sh is excluded by !.agents/**
  • .agents/skills/qa-report/scripts/generate_test_cases.sh is excluded by !.agents/**
  • .agents/skills/tui-glamorous/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/tui-glamorous/references/PROMPTS.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/tui-glamorous/references/QUICK-REFERENCE.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/tui-glamorous/references/advanced-patterns.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/tui-glamorous/references/component-catalog.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/tui-glamorous/references/go-tui.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/tui-glamorous/references/infrastructure.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/tui-glamorous/references/production-architecture.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/tui-glamorous/references/shell-scripts.md is excluded by !**/*.md, !.agents/**
  • .codex/ledger/2026-04-17-MEMORY-task-runtime-overrides.md is excluded by !**/*.md
  • .codex/ledger/2026-04-17-MEMORY-tasks-props-qa.md is excluded by !**/*.md
  • README.md is excluded by !**/*.md
  • ai-docs/reviews-pr-93/_summary.md is excluded by !**/*.md
  • ai-docs/reviews-pr-93/issues/001-issue.md is excluded by !**/*.md
  • ai-docs/reviews-pr-93/issues/002-issue.md is excluded by !**/*.md
  • ai-docs/reviews-pr-93/issues/003-issue.md is excluded by !**/*.md
  • ai-docs/reviews-pr-93/issues/004-issue.md is excluded by !**/*.md
  • ai-docs/reviews-pr-93/issues/005-issue.md is excluded by !**/*.md
  • ai-docs/reviews-pr-93/issues/006-issue.md is excluded by !**/*.md
  • ai-docs/reviews-pr-93/issues/007-issue.md is excluded by !**/*.md
  • ai-docs/reviews-pr-93/issues/008-issue.md is excluded by !**/*.md
  • ai-docs/reviews-pr-93/issues/issue_009.md is excluded by !**/*.md
  • ai-docs/reviews-pr-93/issues/issue_010.md is excluded by !**/*.md
  • ai-docs/reviews-pr-93/issues/issue_011.md is excluded by !**/*.md
  • ai-docs/reviews-pr-93/issues/issue_012.md is excluded by !**/*.md
  • ai-docs/reviews-pr-93/issues/issue_013.md is excluded by !**/*.md
  • ai-docs/reviews-pr-93/issues/issue_014.md is excluded by !**/*.md
  • ai-docs/reviews-pr-93/issues/issue_015.md is excluded by !**/*.md
  • ai-docs/reviews-pr-93/issues/issue_016.md is excluded by !**/*.md
  • ai-docs/reviews-pr-93/issues/issue_017.md is excluded by !**/*.md
  • ai-docs/reviews-pr-93/outside/003-outside_01_internal_setup_reusable_agents.go.md is excluded by !**/*.md
  • docs/extensibility/hook-reference.md is excluded by !**/*.md
  • skills-lock.json is excluded by !**/*.json
  • skills/compozy/references/config-reference.md is excluded by !**/*.md
📒 Files selected for processing (48)
  • internal/cli/commands.go
  • internal/cli/form.go
  • internal/cli/form_test.go
  • internal/cli/root_test.go
  • internal/cli/state.go
  • internal/cli/task_runtime_flag.go
  • internal/cli/task_runtime_flag_test.go
  • internal/cli/task_runtime_form.go
  • internal/cli/testdata/exec_help.golden
  • internal/cli/testdata/start_help.golden
  • internal/cli/workspace_config.go
  • internal/cli/workspace_config_test.go
  • internal/core/api.go
  • internal/core/extension/manager.go
  • internal/core/extension/manifest.go
  • internal/core/model/hooks.go
  • internal/core/model/model_test.go
  • internal/core/model/preparation.go
  • internal/core/model/runtime_config.go
  • internal/core/model/task_runtime.go
  • internal/core/plan/prepare.go
  • internal/core/plan/prepare_test.go
  • internal/core/run/executor/execution.go
  • internal/core/run/executor/execution_acp_test.go
  • internal/core/run/executor/hooks.go
  • internal/core/run/executor/lifecycle.go
  • internal/core/run/executor/result.go
  • internal/core/run/executor/runner.go
  • internal/core/run/executor/runtime_guard_test.go
  • internal/core/run/internal/acpshared/command_io.go
  • internal/core/run/internal/acpshared/command_io_test.go
  • internal/core/run/internal/runshared/config.go
  • internal/core/run/ui/model.go
  • internal/core/run/ui/timeline.go
  • internal/core/run/ui/types.go
  • internal/core/run/ui/update.go
  • internal/core/run/ui/view_test.go
  • internal/core/workspace/config_merge.go
  • internal/core/workspace/config_test.go
  • internal/core/workspace/config_types.go
  • internal/core/workspace/config_validate.go
  • pkg/compozy/events/event_test.go
  • pkg/compozy/events/kinds/job.go
  • sdk/extension/compat_test.go
  • sdk/extension/handlers.go
  • sdk/extension/hooks.go
  • sdk/extension/smoke_test.go
  • sdk/extension/types.go

Comment thread internal/cli/form.go Outdated
Comment thread internal/cli/root_test.go Outdated
Comment thread internal/cli/state.go Outdated
Comment thread internal/cli/workspace_config_test.go
Comment thread internal/core/run/executor/execution.go Outdated
Comment thread internal/core/run/executor/runner.go
Comment thread internal/core/run/internal/acpshared/command_io_test.go
Comment thread internal/core/workspace/config_test.go
Comment thread pkg/compozy/events/event_test.go Outdated
Comment thread sdk/extension/compat_test.go Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant