fcloud-sdk 0.1.2__tar.gz → 0.1.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/CHANGELOG.md +6 -0
  2. {fcloud_sdk-0.1.2/src/fcloud_sdk.egg-info → fcloud_sdk-0.1.3}/PKG-INFO +3 -3
  3. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/README.md +2 -2
  4. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/pyproject.toml +1 -1
  5. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/setup_cmd.py +5 -2
  6. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/v2_connect.py +7 -0
  7. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3/src/fcloud_sdk.egg-info}/PKG-INFO +3 -3
  8. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_setup_cmd.py +6 -0
  9. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/CONTRIBUTING.md +0 -0
  10. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/LICENSE +0 -0
  11. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/MANIFEST.in +0 -0
  12. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/NOTICE +0 -0
  13. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/SKILL.md +0 -0
  14. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/setup.cfg +0 -0
  15. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/SKILL.md +0 -0
  16. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/__init__.py +0 -0
  17. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/__main__.py +0 -0
  18. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/_direct_bridge.py +0 -0
  19. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/_legacy_env.py +0 -0
  20. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/__init__.py +0 -0
  21. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/attach.py +0 -0
  22. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/common.py +0 -0
  23. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/console.py +0 -0
  24. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/context.py +0 -0
  25. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/exec_cmd.py +0 -0
  26. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/files.py +0 -0
  27. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/hardware.py +0 -0
  28. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/help.py +0 -0
  29. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/interactive.py +0 -0
  30. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/job.py +0 -0
  31. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/main.py +0 -0
  32. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/migration.py +0 -0
  33. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/mount.py +0 -0
  34. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/output.py +0 -0
  35. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/processes.py +0 -0
  36. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/registry.py +0 -0
  37. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/run.py +0 -0
  38. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/sessions.py +0 -0
  39. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/setup.py +0 -0
  40. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/ssh.py +0 -0
  41. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/sweep.py +0 -0
  42. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/sweep_harvest.py +0 -0
  43. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/sweep_watch.py +0 -0
  44. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/volume.py +0 -0
  45. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli/wait.py +0 -0
  46. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/cli_args.py +0 -0
  47. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/client.py +0 -0
  48. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/client_projects.py +0 -0
  49. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/client_sessions.py +0 -0
  50. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/client_volumes.py +0 -0
  51. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/config.py +0 -0
  52. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/direct.py +0 -0
  53. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/errors.py +0 -0
  54. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/fileset.py +0 -0
  55. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/image.py +0 -0
  56. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/job.py +0 -0
  57. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/providers/__init__.py +0 -0
  58. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/providers/requests_http.py +0 -0
  59. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/py.typed +0 -0
  60. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/session.py +0 -0
  61. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/shell.py +0 -0
  62. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/sweeps.py +0 -0
  63. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/tunnel.py +0 -0
  64. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/types.py +0 -0
  65. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/version.py +0 -0
  66. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/volume_wait.py +0 -0
  67. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud/volumes.py +0 -0
  68. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud_sdk.egg-info/SOURCES.txt +0 -0
  69. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud_sdk.egg-info/dependency_links.txt +0 -0
  70. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud_sdk.egg-info/entry_points.txt +0 -0
  71. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud_sdk.egg-info/requires.txt +0 -0
  72. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/fcloud_sdk.egg-info/top_level.txt +0 -0
  73. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/src/foom/__init__.py +0 -0
  74. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/conftest.py +0 -0
  75. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_cli_args.py +0 -0
  76. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_cli_dispatch.py +0 -0
  77. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_cli_guards.py +0 -0
  78. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_cli_help.py +0 -0
  79. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_client.py +0 -0
  80. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_client_contracts_c.py +0 -0
  81. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_client_host_frames_contract.py +0 -0
  82. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_client_http_contract.py +0 -0
  83. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_client_telemetry.py +0 -0
  84. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_config.py +0 -0
  85. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_default_image.py +0 -0
  86. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_direct_bridge.py +0 -0
  87. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_direct_fake_host.py +0 -0
  88. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_dotenv_precedence.py +0 -0
  89. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_download_volume_hint.py +0 -0
  90. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_emit_pid.py +0 -0
  91. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_exec_attach_retry.py +0 -0
  92. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_fileset.py +0 -0
  93. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_job.py +0 -0
  94. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_legacy_shim.py +0 -0
  95. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_map_default_image.py +0 -0
  96. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_progress_narration.py +0 -0
  97. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_provider_env_default.py +0 -0
  98. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_queued_reason_render.py +0 -0
  99. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_rate_limit_ride.py +0 -0
  100. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_rebuild_respawn.py +0 -0
  101. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_ride_cap.py +0 -0
  102. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_run_migration.py +0 -0
  103. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_run_volume_collision.py +0 -0
  104. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_run_wait_flags.py +0 -0
  105. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_secret_resolution.py +0 -0
  106. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_session_truth.py +0 -0
  107. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_sessions_live_statuses.py +0 -0
  108. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_sessions_point_lookup.py +0 -0
  109. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_shell_env.py +0 -0
  110. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_shell_interrupt.py +0 -0
  111. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_shell_volumes.py +0 -0
  112. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_skus.py +0 -0
  113. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_sweep_cost_optin.py +0 -0
  114. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_sweep_lifecycle_ux.py +0 -0
  115. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_sweep_status_view.py +0 -0
  116. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_sweeps_binding.py +0 -0
  117. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_tunnel.py +0 -0
  118. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_types.py +0 -0
  119. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_upload_s3_path.py +0 -0
  120. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_v2_connect.py +0 -0
  121. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_volume_cli_hardening.py +0 -0
  122. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_volume_download_delete.py +0 -0
  123. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_volume_resolution.py +0 -0
  124. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_volume_wait.py +0 -0
  125. {fcloud_sdk-0.1.2 → fcloud_sdk-0.1.3}/tests/test_wait.py +0 -0
@@ -4,6 +4,12 @@ All notable changes to the `fcloud` Python SDK and CLI are recorded here.
4
4
  The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/);
5
5
  versions follow [Semantic Versioning](https://semver.org/).
6
6
 
7
+ ## [0.1.3] - 2026-08-27
8
+
9
+ ### Changed
10
+ - `fcloud setup` installs the agent skill for all agents by default (Enter or
11
+ non-interactive stdin = `all`); `--agents none` opts out.
12
+
7
13
  ## [0.1.2] - 2026-08-27
8
14
 
9
15
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fcloud-sdk
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: Python SDK and CLI for the fcloud GPU compute platform
5
5
  Author: fcloud
6
6
  License-Expression: Apache-2.0
@@ -57,7 +57,7 @@ fcloud setup # prompts for the key; optionally installs the agent ski
57
57
  fcloud health # verify connectivity
58
58
  ```
59
59
 
60
- `fcloud setup --agents all` also installs the fcloud skill file for supported
60
+ `fcloud setup` also installs (by default) the fcloud skill file for supported
61
61
  coding agents (Cursor, Claude Code, Codex) so an agent can drive fcloud for you.
62
62
  Use `--agents none` to skip that.
63
63
 
@@ -210,7 +210,7 @@ cloned repo's `fcloud.json` the way you would its Dockerfile.
210
210
 
211
211
  ## Agent skill
212
212
 
213
- `fcloud setup --agents all` installs `SKILL.md` for supported coding agents. It
213
+ `fcloud setup` installs `SKILL.md` by default (`--agents none` to skip) for supported coding agents. It
214
214
  is the long-form, agent-oriented guide: workflow patterns, monitoring loops,
215
215
  and anti-patterns.
216
216
 
@@ -23,7 +23,7 @@ fcloud setup # prompts for the key; optionally installs the agent ski
23
23
  fcloud health # verify connectivity
24
24
  ```
25
25
 
26
- `fcloud setup --agents all` also installs the fcloud skill file for supported
26
+ `fcloud setup` also installs (by default) the fcloud skill file for supported
27
27
  coding agents (Cursor, Claude Code, Codex) so an agent can drive fcloud for you.
28
28
  Use `--agents none` to skip that.
29
29
 
@@ -176,7 +176,7 @@ cloned repo's `fcloud.json` the way you would its Dockerfile.
176
176
 
177
177
  ## Agent skill
178
178
 
179
- `fcloud setup --agents all` installs `SKILL.md` for supported coding agents. It
179
+ `fcloud setup` installs `SKILL.md` by default (`--agents none` to skip) for supported coding agents. It
180
180
  is the long-form, agent-oriented guide: workflow patterns, monitoring loops,
181
181
  and anti-patterns.
182
182
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "fcloud-sdk"
7
- version = "0.1.2"
7
+ version = "0.1.3"
8
8
  description = "Python SDK and CLI for the fcloud GPU compute platform"
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"
@@ -88,8 +88,11 @@ def prompt_for_agents(agents: str) -> set[str]:
88
88
  available = ", ".join(sorted(SUPPORTED_AGENTS))
89
89
  print("Install agent skills? This teaches your coding agent how to use fcloud.")
90
90
  print(f" Available: {available}, all")
91
- choice = input(f"Install for [{available}/all/none]: ").strip()
92
- return parse_agents(choice)
91
+ try:
92
+ choice = input(f"Install for [all/{available}/none] (default: all): ").strip()
93
+ except EOFError: # non-interactive stdin: take the default
94
+ choice = ""
95
+ return parse_agents(choice or "all")
93
96
 
94
97
 
95
98
  def parse_agents(value: str) -> set[str]:
@@ -455,6 +455,7 @@ def allocate_session(
455
455
  provider: str = "",
456
456
  region: str = "",
457
457
  ephemeral: bool = False,
458
+ rebuild_image: bool = False,
458
459
  on_queued: Callable[[str], None] | None = None,
459
460
  on_wait: Callable[[float], None] | None = None,
460
461
  on_provisioning: Callable[[dict[str, Any]], None] | None = None,
@@ -488,6 +489,12 @@ def allocate_session(
488
489
  body["min_disk_gb"] = min_disk_gb
489
490
  if volume_names:
490
491
  body["volume_names"] = volume_names
492
+ # Ops tool: bypass every build-cache read so the host re-runs the full
493
+ # layered build and republishes the composed indexes under their
494
+ # unchanged keys (regenerate-in-place). Applies to the initial hot
495
+ # build only; resumes never rebuild. See tools/rebuild_standard_images/.
496
+ if rebuild_image:
497
+ body["rebuild_image"] = True
491
498
  # Optional provider/region pin: place this session only in the named
492
499
  # cloud+region (reuses the dispatcher's restore-locality machinery). Mainly
493
500
  # for exercising a provider-specific checkpoint/restore path in tests.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fcloud-sdk
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: Python SDK and CLI for the fcloud GPU compute platform
5
5
  Author: fcloud
6
6
  License-Expression: Apache-2.0
@@ -57,7 +57,7 @@ fcloud setup # prompts for the key; optionally installs the agent ski
57
57
  fcloud health # verify connectivity
58
58
  ```
59
59
 
60
- `fcloud setup --agents all` also installs the fcloud skill file for supported
60
+ `fcloud setup` also installs (by default) the fcloud skill file for supported
61
61
  coding agents (Cursor, Claude Code, Codex) so an agent can drive fcloud for you.
62
62
  Use `--agents none` to skip that.
63
63
 
@@ -210,7 +210,7 @@ cloned repo's `fcloud.json` the way you would its Dockerfile.
210
210
 
211
211
  ## Agent skill
212
212
 
213
- `fcloud setup --agents all` installs `SKILL.md` for supported coding agents. It
213
+ `fcloud setup` installs `SKILL.md` by default (`--agents none` to skip) for supported coding agents. It
214
214
  is the long-form, agent-oriented guide: workflow patterns, monitoring loops,
215
215
  and anti-patterns.
216
216
 
@@ -9,6 +9,7 @@ import pytest
9
9
  from fcloud.setup_cmd import (
10
10
  install_agent_skills,
11
11
  parse_agents,
12
+ prompt_for_agents,
12
13
  render_skill_markdown,
13
14
  skill_path_for_agent,
14
15
  )
@@ -28,6 +29,11 @@ def test_parse_agents_accepts_comma_separated_names():
28
29
  assert parse_agents("claude,cursor") == {"claude", "cursor"}
29
30
 
30
31
 
32
+ def test_prompt_for_agents_defaults_to_all(monkeypatch):
33
+ monkeypatch.setattr("builtins.input", lambda _: "")
34
+ assert prompt_for_agents("") == {"claude", "codex", "cursor"}
35
+
36
+
31
37
  def test_parse_agents_rejects_unknown_names():
32
38
  with pytest.raises(SystemExit, match="Unsupported agent"):
33
39
  parse_agents("claude,unknown")
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes