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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion crates/path-cli/src/cmd_cache.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ fn run_sync(
let explicit = !types.is_empty();
let types = resolve_types(&types);
let config_dir = config.config_dir()?;
let bundle = providers::harness_bundle(config);
let bundle = providers::harness_bundle(&config.projection());
let outcomes = sync_bundle(
&config_dir,
&bundle,
Expand Down
465 changes: 220 additions & 245 deletions crates/path-cli/src/cmd_export.rs

Large diffs are not rendered by default.

14 changes: 7 additions & 7 deletions crates/path-cli/src/cmd_import.rs
Original file line number Diff line number Diff line change
Expand Up @@ -435,7 +435,7 @@ fn derive_claude(
all: bool,
config: &Config,
) -> Result<Vec<DerivedDoc>> {
let manager = providers::claude_convo(config);
let manager = providers::claude_convo(&config.projection());
derive_claude_with_manager(&manager, project, session, all)
}

Expand Down Expand Up @@ -633,7 +633,7 @@ fn derive_gemini(
all: bool,
config: &Config,
) -> Result<Vec<DerivedDoc>> {
let manager = providers::gemini_convo(config);
let manager = providers::gemini_convo(&config.projection());
derive_gemini_with_manager(&manager, project, session, all)
}

Expand Down Expand Up @@ -820,7 +820,7 @@ fn pick_gemini_global(
}

fn derive_codex(session: Option<String>, all: bool, config: &Config) -> Result<Vec<DerivedDoc>> {
let manager = providers::codex_convo(config);
let manager = providers::codex_convo(&config.projection());

let session_ids: Vec<String> = match (session, all) {
(Some(s), _) => vec![s],
Expand Down Expand Up @@ -921,7 +921,7 @@ fn pick_codex(manager: &toolpath_codex::CodexConvo) -> Result<Option<Vec<String>
}

fn derive_copilot(session: Option<String>, all: bool, config: &Config) -> Result<Vec<DerivedDoc>> {
let manager = providers::copilot_convo(config);
let manager = providers::copilot_convo(&config.projection());

let session_ids: Vec<String> = match (session, all) {
(Some(s), _) => vec![s],
Expand Down Expand Up @@ -1040,7 +1040,7 @@ fn derive_opencode(

#[cfg(not(target_os = "emscripten"))]
{
let manager = providers::opencode_convo(config);
let manager = providers::opencode_convo(&config.projection());
let derive_one = |sid: &str| derive_opencode_session_with(&manager, sid, no_snapshot_diffs);

let session_ids: Vec<String> = match (session, all) {
Expand Down Expand Up @@ -1153,7 +1153,7 @@ fn derive_cursor(

#[cfg(not(target_os = "emscripten"))]
{
let manager = providers::cursor_convo(config);
let manager = providers::cursor_convo(&config.projection());
let derive_one = |sid: &str| derive_cursor_session_with(&manager, sid);

let workspace_filter = project
Expand Down Expand Up @@ -1296,7 +1296,7 @@ fn derive_pi(
base: Option<PathBuf>,
config: &Config,
) -> Result<Vec<DerivedDoc>> {
let manager = providers::pi_convo(config, base.as_deref());
let manager = providers::pi_convo(&config.projection(), base.as_deref());
derive_pi_with_manager(&manager, project, session, all)
}

Expand Down
32 changes: 20 additions & 12 deletions crates/path-cli/src/cmd_incept.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ use anyhow::Result;
use clap::Subcommand;
use std::path::PathBuf;

use crate::config::Config;

#[derive(Subcommand, Debug)]
pub enum InceptTarget {
/// Incept a Toolpath document into a Claude Code session layout.
Expand Down Expand Up @@ -45,7 +47,7 @@ pub enum InceptTarget {
},
}

pub fn run(target: InceptTarget) -> Result<()> {
pub fn run(target: InceptTarget, config: &Config) -> Result<()> {
match target {
InceptTarget::Claude {
input,
Expand All @@ -54,12 +56,15 @@ pub fn run(target: InceptTarget) -> Result<()> {
} => {
let input = resolve_input(input)?;
let (project, output) = default_project(project, output);
crate::cmd_export::run(crate::cmd_export::ExportTarget::Claude {
input,
project,
output,
force: false,
})
crate::cmd_export::run(
crate::cmd_export::ExportTarget::Claude {
input,
project,
output,
force: false,
},
config,
)
}
InceptTarget::Cursor {
input,
Expand All @@ -68,11 +73,14 @@ pub fn run(target: InceptTarget) -> Result<()> {
} => {
let input = resolve_input(input)?;
let (project, output) = default_project(project, output);
crate::cmd_export::run(crate::cmd_export::ExportTarget::Cursor {
input,
project,
output,
})
crate::cmd_export::run(
crate::cmd_export::ExportTarget::Cursor {
input,
project,
output,
},
config,
)
}
}
}
Expand Down
14 changes: 7 additions & 7 deletions crates/path-cli/src/cmd_list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ fn run_github(repo: String, fmt: ListFormat) -> Result<()> {
// ── Claude ──────────────────────────────────────────────────────────────────

fn run_claude(project: Option<String>, fmt: ListFormat, config: &Config) -> Result<()> {
let manager = providers::claude_convo(config);
let manager = providers::claude_convo(&config.projection());

match (project, fmt) {
// TSV/JSON without --project: emit sessions across every project so
Expand Down Expand Up @@ -445,7 +445,7 @@ fn emit_claude_tsv(m: &toolpath_claude::ConversationMetadata) {
// ── Gemini ──────────────────────────────────────────────────────────────────

fn run_gemini(project: Option<String>, fmt: ListFormat, config: &Config) -> Result<()> {
let manager = providers::gemini_convo(config);
let manager = providers::gemini_convo(&config.projection());

match (project, fmt) {
(None, ListFormat::Tsv) => list_gemini_sessions_all(&manager, ListFormat::Tsv),
Expand Down Expand Up @@ -619,7 +619,7 @@ fn emit_gemini_tsv(m: &toolpath_gemini::ConversationMetadata) {
// ── Codex ───────────────────────────────────────────────────────────────────

fn run_codex(fmt: ListFormat, config: &Config) -> Result<()> {
let manager = providers::codex_convo(config);
let manager = providers::codex_convo(&config.projection());
let sessions = manager
.list_sessions()
.map_err(|e| anyhow::anyhow!("{}", e))?;
Expand Down Expand Up @@ -703,7 +703,7 @@ fn run_codex(fmt: ListFormat, config: &Config) -> Result<()> {
// ── Copilot (preview) ─────────────────────────────────────────────────────────

fn run_copilot(fmt: ListFormat, config: &Config) -> Result<()> {
let manager = providers::copilot_convo(config);
let manager = providers::copilot_convo(&config.projection());
let sessions = manager
.list_sessions()
.map_err(|e| anyhow::anyhow!("{}", e))?;
Expand Down Expand Up @@ -788,7 +788,7 @@ fn run_opencode(project: Option<String>, fmt: ListFormat, config: &Config) -> Re

#[cfg(not(target_os = "emscripten"))]
{
let manager = providers::opencode_convo(config);
let manager = providers::opencode_convo(&config.projection());
let metas = manager
.io()
.list_session_metadata(project.as_deref())
Expand Down Expand Up @@ -878,7 +878,7 @@ fn run_cursor(project: Option<String>, fmt: ListFormat, config: &Config) -> Resu

#[cfg(not(target_os = "emscripten"))]
{
let manager = providers::cursor_convo(config);
let manager = providers::cursor_convo(&config.projection());
let mut metas = manager
.io()
.list_session_metadata()
Expand Down Expand Up @@ -988,7 +988,7 @@ fn run_pi(
fmt: ListFormat,
config: &Config,
) -> Result<()> {
let manager = providers::pi_convo(config, base.as_deref());
let manager = providers::pi_convo(&config.projection(), base.as_deref());

match (project, fmt) {
(None, ListFormat::Tsv) => list_pi_sessions_all(&manager, ListFormat::Tsv),
Expand Down
6 changes: 3 additions & 3 deletions crates/path-cli/src/cmd_p.rs
Original file line number Diff line number Diff line change
Expand Up @@ -103,14 +103,14 @@ pub fn run(command: PCommand, pretty: bool, config: &Config) -> Result<()> {
json,
} => crate::cmd_list::run(source, format, json, config),
PCommand::Import { args } => crate::cmd_import::run(args, pretty, config),
PCommand::Export { target } => crate::cmd_export::run(target),
PCommand::Export { target } => crate::cmd_export::run(target, config),
PCommand::Cache { op } => crate::cmd_cache::run(op, config),
PCommand::Render { format } => crate::cmd_render::run(format),
PCommand::Merge { inputs, title } => crate::cmd_merge::run(inputs, title, pretty),
PCommand::Validate { input } => crate::cmd_validate::run(input),
PCommand::Derive { source } => crate::cmd_derive::run(source, pretty),
PCommand::Project { target } => crate::cmd_project::run(target),
PCommand::Incept { target } => crate::cmd_incept::run(target),
PCommand::Project { target } => crate::cmd_project::run(target, config),
PCommand::Incept { target } => crate::cmd_incept::run(target, config),
PCommand::Track { op } => crate::cmd_track::run(op, pretty),
PCommand::Query { op } => crate::cmd_p_query::run(op, pretty),
}
Expand Down
13 changes: 8 additions & 5 deletions crates/path-cli/src/cmd_project.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ use anyhow::Result;
use clap::Subcommand;
use std::path::PathBuf;

use crate::config::Config;

#[derive(Subcommand, Debug)]
pub enum ProjectTarget {
/// Project a toolpath document into Claude JSONL format
Expand All @@ -24,15 +26,16 @@ pub enum ProjectTarget {
},
}

pub fn run(target: ProjectTarget) -> Result<()> {
pub fn run(target: ProjectTarget, config: &Config) -> Result<()> {
match target {
ProjectTarget::Claude { input, output } => {
crate::cmd_export::run(crate::cmd_export::ExportTarget::Claude {
ProjectTarget::Claude { input, output } => crate::cmd_export::run(
crate::cmd_export::ExportTarget::Claude {
input,
project: None,
output,
force: false,
})
}
},
config,
),
}
}
2 changes: 1 addition & 1 deletion crates/path-cli/src/cmd_query.rs
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ fn sync_query_scope(args: &QueryArgs, config: &Config) {
return;
}
};
let bundle = crate::providers::harness_bundle(config);
let bundle = crate::providers::harness_bundle(&config.projection());
match crate::sync::sync_bundle(
&config_dir,
&bundle,
Expand Down
24 changes: 15 additions & 9 deletions crates/path-cli/src/cmd_resume.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ use anyhow::{Context, Result};
use clap::Args;
use std::path::PathBuf;

use crate::config::{Config, ProjectionConfig};
use crate::harness::Harness;

#[derive(Args, Debug)]
Expand Down Expand Up @@ -110,7 +111,10 @@ pub fn run_with_strategy(args: ResumeArgs, exec: &dyn ExecStrategy) -> Result<()
}
);

let session_id = project_into_harness(path, target, &cwd)?;
// Transitional: `resume` does not take `&Config` yet; load one for
// the export path.
let config = Config::load()?.projection();
let session_id = project_into_harness(path, target, &cwd, &config)?;
let (binary, argv) = invocation_for(target, &session_id, &cwd);
exec_harness(&binary, &argv, &cwd, exec)
}
Expand Down Expand Up @@ -458,9 +462,10 @@ pub(crate) fn project_into_harness(
path: &TPath,
harness: Harness,
cwd: &std::path::Path,
config: &ProjectionConfig,
) -> Result<String> {
match harness {
Harness::Claude => match crate::cmd_export::project_claude(path, cwd)? {
Harness::Claude => match crate::cmd_export::project_claude(path, cwd, config)? {
crate::cmd_export::ClaudeProjection::Written { session_id } => Ok(session_id),
crate::cmd_export::ClaudeProjection::AlreadyLocal { session_id } => {
eprintln!(
Expand All @@ -469,12 +474,12 @@ pub(crate) fn project_into_harness(
Ok(session_id)
}
},
Harness::Gemini => crate::cmd_export::project_gemini(path, cwd),
Harness::Codex => crate::cmd_export::project_codex(path, cwd),
Harness::Copilot => crate::cmd_export::project_copilot(path, cwd),
Harness::Opencode => crate::cmd_export::project_opencode(path, cwd),
Harness::Cursor => crate::cmd_export::project_cursor(path, cwd),
Harness::Pi => crate::cmd_export::project_pi(path, cwd),
Harness::Gemini => crate::cmd_export::project_gemini(path, cwd, config),
Harness::Codex => crate::cmd_export::project_codex(path, cwd, config),
Harness::Copilot => crate::cmd_export::project_copilot(path, cwd, config),
Harness::Opencode => crate::cmd_export::project_opencode(path, cwd, config),
Harness::Cursor => crate::cmd_export::project_cursor(path, cwd, config),
Harness::Pi => crate::cmd_export::project_pi(path, cwd, config),
}
}

Expand Down Expand Up @@ -987,7 +992,8 @@ mod tests {
let cwd = tempfile::tempdir().unwrap();
let path = make_convo_path_for_resume("claude-code://resume-test-session");

let session_id = project_into_harness(&path, Harness::Claude, cwd.path()).unwrap();
let config = Config::load().unwrap().projection();
let session_id = project_into_harness(&path, Harness::Claude, cwd.path(), &config).unwrap();
assert!(!session_id.is_empty());
}

Expand Down
14 changes: 7 additions & 7 deletions crates/path-cli/src/cmd_show.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ pub fn run(source: ShowSource, ansi: bool, config: &Config) -> Result<()> {
fn derive_one(source: ShowSource, config: &Config) -> Result<toolpath::v1::Path> {
match source {
ShowSource::Claude { project, session } => {
let manager = providers::claude_convo(config);
let manager = providers::claude_convo(&config.projection());
let convo = manager
.read_conversation(&project, &session)
.map_err(|e| anyhow::anyhow!("{}", e))?;
Expand All @@ -121,7 +121,7 @@ fn derive_one(source: ShowSource, config: &Config) -> Result<toolpath::v1::Path>
Ok(toolpath_claude::derive::derive_path(&convo, &cfg))
}
ShowSource::Gemini { project, session } => {
let manager = providers::gemini_convo(config);
let manager = providers::gemini_convo(&config.projection());
let convo = manager
.read_conversation(&project, &session)
.map_err(|e| anyhow::anyhow!("{}", e))?;
Expand All @@ -135,7 +135,7 @@ fn derive_one(source: ShowSource, config: &Config) -> Result<toolpath::v1::Path>
session,
project: _,
} => {
let manager = providers::codex_convo(config);
let manager = providers::codex_convo(&config.projection());
let s = manager
.read_session(&session)
.map_err(|e| anyhow::anyhow!("{}", e))?;
Expand All @@ -146,7 +146,7 @@ fn derive_one(source: ShowSource, config: &Config) -> Result<toolpath::v1::Path>
session,
project: _,
} => {
let manager = providers::copilot_convo(config);
let manager = providers::copilot_convo(&config.projection());
let s = manager
.read_session(&session)
.map_err(|e| anyhow::anyhow!("{}", e))?;
Expand All @@ -157,7 +157,7 @@ fn derive_one(source: ShowSource, config: &Config) -> Result<toolpath::v1::Path>
session,
project: _,
} => {
let manager = providers::opencode_convo(config);
let manager = providers::opencode_convo(&config.projection());
let s = manager
.read_session(&session)
.map_err(|e| anyhow::anyhow!("{}", e))?;
Expand All @@ -172,7 +172,7 @@ fn derive_one(source: ShowSource, config: &Config) -> Result<toolpath::v1::Path>
session,
project: _,
} => {
let manager = providers::cursor_convo(config);
let manager = providers::cursor_convo(&config.projection());
let s = manager
.read_session(&session)
.map_err(|e| anyhow::anyhow!("{}", e))?;
Expand All @@ -184,7 +184,7 @@ fn derive_one(source: ShowSource, config: &Config) -> Result<toolpath::v1::Path>
session,
base,
} => {
let manager = providers::pi_convo(config, base.as_deref());
let manager = providers::pi_convo(&config.projection(), base.as_deref());
let s = manager
.read_session(&project, &session)
.map_err(|e| anyhow::anyhow!("{}", e))?;
Expand Down
Loading
Loading