deepvista-cli 0.4.0__tar.gz → 0.6.0__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 (93) hide show
  1. deepvista_cli-0.6.0/.release-please-manifest.json +3 -0
  2. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/CHANGELOG.md +19 -0
  3. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/PKG-INFO +1 -1
  4. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/commands/skill.py +108 -1
  5. deepvista_cli-0.6.0/deepvista_cli/commands/task_queue.py +669 -0
  6. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/main.py +3 -0
  7. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/plugins/claude-code/.claude-plugin/plugin.json +1 -1
  8. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/pyproject.toml +1 -1
  9. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/skills/deepvista/reference/skill.md +31 -0
  10. deepvista_cli-0.6.0/tests/test_task_queue_commands.py +698 -0
  11. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/uv.lock +1 -1
  12. deepvista_cli-0.4.0/.release-please-manifest.json +0 -3
  13. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/.claude-plugin/marketplace.json +0 -0
  14. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/.github/workflows/ci.yml +0 -0
  15. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/.github/workflows/publish.yml +0 -0
  16. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/.github/workflows/release-please.yml +0 -0
  17. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/.gitignore +0 -0
  18. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/.pre-commit-config.yaml +0 -0
  19. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/CLAUDE.md +0 -0
  20. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/CONTRIBUTING.md +0 -0
  21. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/LICENSE +0 -0
  22. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/README.md +0 -0
  23. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/__init__.py +0 -0
  24. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/agent_catalog.py +0 -0
  25. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/auth/__init__.py +0 -0
  26. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/auth/callback_server.py +0 -0
  27. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/auth/login.py +0 -0
  28. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/auth/tokens.py +0 -0
  29. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/client/__init__.py +0 -0
  30. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/client/http.py +0 -0
  31. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/client/origin.py +0 -0
  32. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/commands/__init__.py +0 -0
  33. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/commands/agents.py +0 -0
  34. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/commands/auth.py +0 -0
  35. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/commands/card.py +0 -0
  36. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/commands/chat.py +0 -0
  37. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/commands/config.py +0 -0
  38. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/commands/lint.py +0 -0
  39. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/commands/memory.py +0 -0
  40. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/commands/notes.py +0 -0
  41. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/commands/schedule.py +0 -0
  42. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/commands/session.py +0 -0
  43. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/commands/upgrade.py +0 -0
  44. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/commands/vistabase.py +0 -0
  45. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/config.py +0 -0
  46. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/output/__init__.py +0 -0
  47. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/output/formatter.py +0 -0
  48. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/resources/__init__.py +0 -0
  49. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/resources/workflow_host_runtime.md +0 -0
  50. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/session_note.py +0 -0
  51. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/skill_catalog.py +0 -0
  52. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/tui/__init__.py +0 -0
  53. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/tui/app.py +0 -0
  54. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/deepvista_cli/workflow_doc.py +0 -0
  55. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/docs/assets/deepvista-banner.png +0 -0
  56. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/install.ps1 +0 -0
  57. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/install.sh +0 -0
  58. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/plugins/README.md +0 -0
  59. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/plugins/claude-code/README.md +0 -0
  60. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/plugins/claude-code/agents/.gitignore +0 -0
  61. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/plugins/claude-code/commands/deepvista.md +0 -0
  62. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/plugins/claude-code/commands/refresh-skills.md +0 -0
  63. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/plugins/claude-code/hooks/hooks.json +0 -0
  64. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/plugins/claude-code/scripts/deepvista-session-end.sh +0 -0
  65. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/plugins/claude-code/scripts/deepvista-session-start.sh +0 -0
  66. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/plugins/claude-code/scripts/deepvista-session-turn.sh +0 -0
  67. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/plugins/claude-code/scripts/deepvista-skill-url.py +0 -0
  68. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/plugins/claude-code/scripts/deepvista-sync.sh +0 -0
  69. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/plugins/claude-code/skills/.gitignore +0 -0
  70. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/plugins/claude-code/skills/install-deepvista-cli/SKILL.md +0 -0
  71. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/release-please-config.json +0 -0
  72. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/scripts/check_plugin_version.py +0 -0
  73. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/skills/deepvista/SKILL.md +0 -0
  74. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/skills/deepvista/reference/chat.md +0 -0
  75. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/skills/deepvista/reference/lint.md +0 -0
  76. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/skills/deepvista/reference/memory.md +0 -0
  77. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/skills/deepvista/reference/notes.md +0 -0
  78. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/skills/deepvista/reference/openclaw.md +0 -0
  79. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/skills/deepvista/reference/session.md +0 -0
  80. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/skills/deepvista/reference/shared.md +0 -0
  81. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/skills/deepvista/reference/skill-analyze-notes.md +0 -0
  82. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/skills/deepvista/reference/skill-create-from-note.md +0 -0
  83. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/skills/deepvista/reference/skill-import-files.md +0 -0
  84. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/skills/deepvista/reference/skill-research-to-skill.md +0 -0
  85. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/skills/deepvista/reference/vistabase-card.md +0 -0
  86. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/skills/deepvista/reference/vistabase.md +0 -0
  87. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/skills/dv-workflow/SKILL.md +0 -0
  88. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/tests/__init__.py +0 -0
  89. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/tests/test_agent_id_tagging.py +0 -0
  90. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/tests/test_session_note_format.py +0 -0
  91. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/tests/test_skill_catalog.py +0 -0
  92. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/tests/test_skill_commands.py +0 -0
  93. {deepvista_cli-0.4.0 → deepvista_cli-0.6.0}/uninstall.sh +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.6.0"
3
+ }
@@ -37,6 +37,25 @@ users what's new between the version they have installed and the latest release.
37
37
  adopts a pre-existing server-side row instead of failing when the local
38
38
  file is missing.
39
39
 
40
+ ## [0.6.0](https://github.com/DeepVista-AI/deepvista-cli/compare/v0.5.0...v0.6.0) (2026-06-22)
41
+
42
+
43
+ ### Features
44
+
45
+ * **DV-1079:** poll by default in task_queue run with single-instance lock ([#162](https://github.com/DeepVista-AI/deepvista-cli/issues/162)) ([eef464e](https://github.com/DeepVista-AI/deepvista-cli/commit/eef464e3ab6cb1591130b79903238a1a7327bc61))
46
+
47
+
48
+ ### Documentation
49
+
50
+ * add direct import path for downloaded skill markdown files ([#160](https://github.com/DeepVista-AI/deepvista-cli/issues/160)) ([31b35b9](https://github.com/DeepVista-AI/deepvista-cli/commit/31b35b9608e75759547d1bb803cc04b3bed2fea1))
51
+
52
+ ## [0.5.0](https://github.com/DeepVista-AI/deepvista-cli/compare/v0.4.0...v0.5.0) (2026-06-04)
53
+
54
+
55
+ ### Features
56
+
57
+ * **DV-936:** task_queue run/list/setup commands ([#155](https://github.com/DeepVista-AI/deepvista-cli/issues/155)) ([0d90691](https://github.com/DeepVista-AI/deepvista-cli/commit/0d9069106d14068d657e16415be80dec95f12085))
58
+
40
59
  ## [0.4.0](https://github.com/DeepVista-AI/deepvista-cli/compare/v0.3.0...v0.4.0) (2026-06-03)
41
60
 
42
61
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepvista-cli
3
- Version: 0.4.0
3
+ Version: 0.6.0
4
4
  Summary: CLI for DeepVista — chat, notes, skills, and memory from your terminal.
5
5
  Project-URL: Homepage, https://deepvista.ai
6
6
  Project-URL: Repository, https://github.com/DeepVista-AI/deepvista-cli
@@ -133,9 +133,37 @@ def skill_get(ctx: click.Context, skill_id: str) -> None:
133
133
  "tool_plan."
134
134
  ),
135
135
  )
136
+ @click.option(
137
+ "--webhook",
138
+ is_flag=True,
139
+ default=False,
140
+ help=(
141
+ "Mark this as a webhook-queued run (DV-955). Appends the task-queue "
142
+ "completion contract so the host agent reports the queue task after "
143
+ "`skill complete`. Set automatically on commands the webhook enqueues."
144
+ ),
145
+ )
146
+ @click.option(
147
+ "--best-effort",
148
+ is_flag=True,
149
+ default=False,
150
+ help=(
151
+ "Unattended run: instruct the host agent to answer open questions "
152
+ "from the vistabase instead of stalling, note assumptions, and only "
153
+ "pause on hard blockers (DV-955)."
154
+ ),
155
+ )
136
156
  @click.option("--dry-run", is_flag=True, default=False, help="Preview what would happen without making any changes.")
137
157
  @click.pass_context
138
- def skill_run(ctx: click.Context, skill_id: str, user_input: str | None, mode: str, dry_run: bool) -> None:
158
+ def skill_run(
159
+ ctx: click.Context,
160
+ skill_id: str,
161
+ user_input: str | None,
162
+ mode: str,
163
+ webhook: bool,
164
+ best_effort: bool,
165
+ dry_run: bool,
166
+ ) -> None:
139
167
  """Run a Skill — host mode by default; ``--mode deepvista`` delegates the whole run server-side.
140
168
 
141
169
  > [!CAUTION] This is a write command — host mode acquires the parent
@@ -160,6 +188,36 @@ def skill_run(ctx: click.Context, skill_id: str, user_input: str | None, mode: s
160
188
  _skill_run_deepvista(ctx, skill_id, user_input, dry_run=dry_run)
161
189
  return
162
190
 
191
+ emit_host_run_packet(
192
+ ctx,
193
+ skill_id,
194
+ user_input,
195
+ mode,
196
+ dry_run=dry_run,
197
+ webhook=webhook,
198
+ best_effort=best_effort,
199
+ )
200
+
201
+
202
+ def emit_host_run_packet(
203
+ ctx: click.Context,
204
+ skill_id: str,
205
+ user_input: str | None,
206
+ mode: str = "host",
207
+ *,
208
+ dry_run: bool = False,
209
+ webhook: bool = False,
210
+ best_effort: bool = False,
211
+ task_id: str | None = None,
212
+ ) -> None:
213
+ """Fetch the skill, acquire the run lock, and print the host run packet.
214
+
215
+ Shared by ``skill run`` (host / auto modes) and ``task_queue run --host``
216
+ (DV-955), which emits packets for webhook-queued workflow tasks instead
217
+ of subprocess-executing them — a queued workflow needs the surrounding
218
+ host agent to drive it. ``task_id`` (only known on the task-queue path)
219
+ threads the queue entry into the completion contract.
220
+ """
163
221
  # host / auto: fetch the card, optionally acquire the lock, and emit a
164
222
  # run packet the host agent drives.
165
223
  card = _client(ctx).post("/get_context_card", {"card_id": skill_id, "card_type": "skill"})
@@ -196,7 +254,11 @@ def skill_run(ctx: click.Context, skill_id: str, user_input: str | None, mode: s
196
254
  "phase_routes": phase_routes,
197
255
  "user_input": user_input or "",
198
256
  "skill_status": card.get("status", ""),
257
+ "webhook": webhook,
258
+ "best_effort": best_effort,
199
259
  }
260
+ if task_id:
261
+ run_header["task_id"] = task_id
200
262
 
201
263
  if dry_run:
202
264
  format_output(
@@ -222,6 +284,12 @@ def skill_run(ctx: click.Context, skill_id: str, user_input: str | None, mode: s
222
284
  click.echo("---")
223
285
  click.echo()
224
286
  click.echo(_load_host_runtime_contract())
287
+ if best_effort:
288
+ click.echo()
289
+ click.echo(_BEST_EFFORT_STANZA)
290
+ if webhook:
291
+ click.echo()
292
+ click.echo(_webhook_task_stanza(task_id))
225
293
 
226
294
 
227
295
  def _skill_run_deepvista(
@@ -258,6 +326,45 @@ def _load_host_runtime_contract() -> str:
258
326
  return resources.files("deepvista_cli.resources").joinpath("workflow_host_runtime.md").read_text(encoding="utf-8")
259
327
 
260
328
 
329
+ # Appended to the runtime contract for unattended runs (DV-955). The run was
330
+ # triggered by a webhook — there is no human in the loop to answer questions.
331
+ _BEST_EFFORT_STANZA = """\
332
+ ## Best-effort mode (unattended run)
333
+
334
+ This run was triggered without a human in the loop. Do NOT stall waiting
335
+ for answers:
336
+
337
+ - When a step needs information, search the vistabase first:
338
+ `deepvista card +search "…"`, `deepvista vistabase +search "…"`,
339
+ `deepvista notes list`. Prefer an answer found there over asking.
340
+ - When nothing answers, make the most reasonable assumption, state it in
341
+ the phase's artifact note, and move to the next step.
342
+ - Reserve `deepvista skill phase pause` for hard blockers only (missing
343
+ credentials, unavailable tools) — never for open questions.
344
+ - Anything that would normally be sent externally (emails, invites) must
345
+ be left as a DRAFT for human review, never dispatched."""
346
+
347
+
348
+ def _webhook_task_stanza(task_id: str | None) -> str:
349
+ """Completion contract for webhook-queued runs (DV-955).
350
+
351
+ The queue entry stays ``running`` until the host agent reports it —
352
+ nothing else will, so skipping this leaves a permanently stuck task.
353
+ """
354
+ task_ref = task_id or "<task_id from `deepvista task_queue list`>"
355
+ return f"""\
356
+ ## Webhook task completion
357
+
358
+ This run came off the agent task queue. The queue entry stays `running`
359
+ until YOU report it — after `deepvista skill complete` (or on failure):
360
+
361
+ ```
362
+ deepvista task_queue complete {task_ref} --status completed
363
+ # or, when the run could not finish:
364
+ deepvista task_queue complete {task_ref} --status failed --note "<one short sentence>"
365
+ ```"""
366
+
367
+
261
368
  # ---------------------------------------------------------------------------
262
369
  # Phase mutators — used by host agents driving the workflow themselves
263
370
  # ---------------------------------------------------------------------------