keystone-cli 0.1.0__py3-none-any.whl

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 (54) hide show
  1. keystone_cli/__init__.py +4 -0
  2. keystone_cli/__main__.py +24 -0
  3. keystone_cli/auth/__init__.py +5 -0
  4. keystone_cli/auth/device_flow.py +197 -0
  5. keystone_cli/auth/token_store.py +71 -0
  6. keystone_cli/commands/__init__.py +1 -0
  7. keystone_cli/commands/agent.py +1017 -0
  8. keystone_cli/commands/dev.py +57 -0
  9. keystone_cli/commands/login.py +207 -0
  10. keystone_cli/commands/workspace.py +87 -0
  11. keystone_cli/devloop.py +183 -0
  12. keystone_cli/platform_client.py +75 -0
  13. keystone_cli/runner.py +87 -0
  14. keystone_cli/scaffold.py +81 -0
  15. keystone_cli/templates/blank/README.md.tmpl +25 -0
  16. keystone_cli/templates/blank/agent.yaml.tmpl +20 -0
  17. keystone_cli/templates/blank/env.tmpl +10 -0
  18. keystone_cli/templates/blank/gitignore.tmpl +7 -0
  19. keystone_cli/templates/blank/pkg/__init__.py.tmpl +0 -0
  20. keystone_cli/templates/blank/pkg/graph.py.tmpl +33 -0
  21. keystone_cli/templates/blank/pyproject.toml.tmpl +12 -0
  22. keystone_cli/templates/hitl/README.md.tmpl +33 -0
  23. keystone_cli/templates/hitl/agent.yaml.tmpl +33 -0
  24. keystone_cli/templates/hitl/env.tmpl +10 -0
  25. keystone_cli/templates/hitl/gitignore.tmpl +7 -0
  26. keystone_cli/templates/hitl/pkg/__init__.py.tmpl +0 -0
  27. keystone_cli/templates/hitl/pkg/graph.py.tmpl +115 -0
  28. keystone_cli/templates/hitl/pyproject.toml.tmpl +12 -0
  29. keystone_cli/templates/llm/README.md.tmpl +29 -0
  30. keystone_cli/templates/llm/agent.yaml.tmpl +29 -0
  31. keystone_cli/templates/llm/env.tmpl +10 -0
  32. keystone_cli/templates/llm/gitignore.tmpl +7 -0
  33. keystone_cli/templates/llm/pkg/__init__.py.tmpl +0 -0
  34. keystone_cli/templates/llm/pkg/graph.py.tmpl +53 -0
  35. keystone_cli/templates/llm/pyproject.toml.tmpl +12 -0
  36. keystone_cli/templates/rag-qa/README.md.tmpl +23 -0
  37. keystone_cli/templates/rag-qa/agent.yaml.tmpl +34 -0
  38. keystone_cli/templates/rag-qa/env.tmpl +10 -0
  39. keystone_cli/templates/rag-qa/gitignore.tmpl +7 -0
  40. keystone_cli/templates/rag-qa/pkg/__init__.py.tmpl +0 -0
  41. keystone_cli/templates/rag-qa/pkg/graph.py.tmpl +69 -0
  42. keystone_cli/templates/rag-qa/pyproject.toml.tmpl +12 -0
  43. keystone_cli/templates/tool-agent/README.md.tmpl +30 -0
  44. keystone_cli/templates/tool-agent/agent.yaml.tmpl +25 -0
  45. keystone_cli/templates/tool-agent/env.tmpl +10 -0
  46. keystone_cli/templates/tool-agent/gitignore.tmpl +7 -0
  47. keystone_cli/templates/tool-agent/pkg/__init__.py.tmpl +0 -0
  48. keystone_cli/templates/tool-agent/pkg/graph.py.tmpl +89 -0
  49. keystone_cli/templates/tool-agent/pyproject.toml.tmpl +15 -0
  50. keystone_cli-0.1.0.dist-info/METADATA +13 -0
  51. keystone_cli-0.1.0.dist-info/RECORD +54 -0
  52. keystone_cli-0.1.0.dist-info/WHEEL +5 -0
  53. keystone_cli-0.1.0.dist-info/entry_points.txt +2 -0
  54. keystone_cli-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,23 @@
1
+ # __AGENT_NAME__
2
+
3
+ RAG Q&A agent (scaffolded from the **rag-qa** template): `retrieve` (rag search over a
4
+ knowledge base) → `answer` (LLM grounded in the retrieved chunks).
5
+
6
+ ## Before deploying
7
+ Fill `config.RT_AGENT_KB_ID` in `agent.yaml` with a knowledge-base id from your workspace.
8
+
9
+ ## Local loop
10
+ ```bash
11
+ keystone agent validate .
12
+ keystone dev . --input '{"q": "what is keystone?"}' --offline # iterate: edit → Enter → new behaviour
13
+ keystone agent run . --input '{"q": "what is keystone?"}' --offline # mocked rag + llm
14
+ ```
15
+
16
+ ## Deploy (dev)
17
+ ```bash
18
+ keystone login
19
+ keystone agent deploy . --publish
20
+ keystone agent invoke __AGENT_NAME__ --input '{"q": "what is keystone?"}'
21
+ ```
22
+
23
+ Rebuilds: bump the `# bundle-rev:` line in `agent.yaml` (identical bundles are dedup'd).
@@ -0,0 +1,34 @@
1
+ # bundle-rev: 0001 — bump this string to force a rebuild (agent-hub dedups identical bundles by SHA-256)
2
+ # __AGENT_NAME__ — scaffolded by `keystone agent init` (template: rag-qa).
3
+ # Local loop:
4
+ # keystone agent validate .
5
+ # keystone agent run . --input '{"q": "what is keystone?"}' --offline
6
+ name: __AGENT_NAME__
7
+ workspace: __WORKSPACE__
8
+ framework: langgraph@1
9
+ entrypoint: __PKG__.graph:make_graph
10
+ runtime: python3.12
11
+ resources:
12
+ timeout_seconds: 60
13
+ io_schema:
14
+ type: object
15
+ properties:
16
+ q:
17
+ type: string
18
+ required: [q]
19
+ dependencies:
20
+ services: [rag, llm-gateway]
21
+ models: [bedrock/anthropic.claude-sonnet-4-6]
22
+ # The KB(s) this agent queries. Declaring it here is what makes agent-hub AUTO-GRANT the
23
+ # agent `knowledge-base:query` on that KB when you publish — leave it empty and a deployed
24
+ # agent 403s on its first retrieval. Put the SAME id you set in RT_AGENT_KB_ID below.
25
+ # (The grant is on-behalf-of-you, so you must also have access to that KB — own it, or be
26
+ # granted knowledge-base:query.)
27
+ knowledge_bases: [] # e.g. [c2a6346e-432c-4044-a283-1728d828ffb8]
28
+ identity:
29
+ scopes: [rag:search, gateway:chat]
30
+ # Per-agent config — injected into the pod as env by the operator. Fill the KB id in
31
+ # before deploying (find yours: portal → Knowledge Bases, or ask your workspace admin).
32
+ config:
33
+ RT_AGENT_KB_ID: "" # ← same id as knowledge_bases above
34
+ RT_AGENT_MODEL: "bedrock/anthropic.claude-sonnet-4-6"
@@ -0,0 +1,10 @@
1
+ # Local-only environment for `__AGENT_NAME__`. NEVER committed (.gitignore) and NEVER packaged —
2
+ # `keystone agent deploy` drops .env* unconditionally, because a bundle goes to S3 and into the
3
+ # agent's image in ECR, where a copy would outlive a revoked key.
4
+ #
5
+ # On the cluster the operator injects these, so leave them empty here unless you run locally.
6
+
7
+ # The agent's platform API key. Create it on the portal (Access policy → API keys) and paste the
8
+ # value shown ONCE. Read automatically: agent-runtime settings use env_prefix="RT_" + env_file=".env",
9
+ # so the RT_ prefix is required — a differently-named variable is IGNORED SILENTLY.
10
+ RT_AGENT_API_KEY=
@@ -0,0 +1,7 @@
1
+ __pycache__/
2
+ *.pyc
3
+ .venv/
4
+ .pytest_cache/
5
+ # Secrets + local config. Also excluded from the deploy bundle unconditionally.
6
+ .env
7
+ .env.*
File without changes
@@ -0,0 +1,69 @@
1
+ """__AGENT_NAME__ — RAG Q&A agent: ``retrieve`` (rag search) → ``answer`` (grounded chat).
2
+
3
+ Caller identity is forwarded automatically by the runtime (ContextVar) — the agent never
4
+ sets headers. Building-block URLs + the KB id come from ENV (`config:` in agent.yaml is
5
+ injected per-agent; RT_RAG_URL / RT_GATEWAY_URL come from the shared runtime baseline).
6
+
7
+ Local loop:
8
+ keystone agent run . --input '{"q": "what is keystone?"}' --offline
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ import os
14
+ from typing import Any, TypedDict
15
+
16
+ from keystone.agent_sdk.clients import GatewayClient, RAGClient
17
+ from langgraph.graph import StateGraph
18
+
19
+ _SYSTEM = (
20
+ "You are a helpful assistant. Answer the question using ONLY the provided context. "
21
+ "If the context does not contain the answer, say you don't know."
22
+ )
23
+
24
+
25
+ class State(TypedDict, total=False):
26
+ q: str
27
+ chunks: list[dict[str, Any]]
28
+ answer: str
29
+
30
+
31
+ def _rag() -> RAGClient:
32
+ # rag terminates auth at Kong and trusts forwarded identity headers — no bearer here.
33
+ return RAGClient(base_url=os.environ.get("RT_RAG_URL", ""))
34
+
35
+
36
+ def _gateway() -> GatewayClient:
37
+ return GatewayClient(
38
+ base_url=os.environ.get("RT_GATEWAY_URL", ""),
39
+ auth_token=os.environ.get("RT_GATEWAY_TOKEN", ""),
40
+ )
41
+
42
+
43
+ async def retrieve(state: State) -> dict[str, Any]:
44
+ kb_id = os.environ.get("RT_AGENT_KB_ID", "")
45
+ result = await _rag().search(query=state["q"], kb_ids=[kb_id] if kb_id else [], top_k=5)
46
+ # rag returns {"results": [{content, chunk_id, score, ...}]} — no envelope.
47
+ return {"chunks": result.get("results", []) if isinstance(result, dict) else []}
48
+
49
+
50
+ async def answer(state: State) -> dict[str, str]:
51
+ context = "\n\n".join(c.get("content", "") for c in state.get("chunks", []))
52
+ out = await _gateway().chat(
53
+ messages=[
54
+ {"role": "system", "content": _SYSTEM},
55
+ {"role": "user", "content": f"Context:\n{context}\n\nQuestion: {state['q']}"},
56
+ ],
57
+ model=os.environ.get("RT_AGENT_MODEL", "bedrock/anthropic.claude-sonnet-4-6"),
58
+ )
59
+ return {"answer": out["choices"][0]["message"]["content"]}
60
+
61
+
62
+ def make_graph():
63
+ g = StateGraph(State)
64
+ g.add_node("retrieve", retrieve)
65
+ g.add_node("answer", answer)
66
+ g.set_entry_point("retrieve")
67
+ g.add_edge("retrieve", "answer")
68
+ g.set_finish_point("answer")
69
+ return g
@@ -0,0 +1,12 @@
1
+ [project]
2
+ name = "__AGENT_NAME__"
3
+ version = "0.1.0"
4
+ requires-python = ">=3.12"
5
+ # Declared for humans/IDEs: the DEPLOYED image is built FROM the platform base image,
6
+ # which already bakes keystone-agent-sdk + langgraph — the server-side (Kaniko) build
7
+ # copies your code only, it does NOT pip-install. Locally, `keystone agent validate/run`
8
+ # execute in the CLI's own environment.
9
+ dependencies = [
10
+ "keystone-agent-sdk>=0.3",
11
+ "langgraph>=1,<2",
12
+ ]
@@ -0,0 +1,30 @@
1
+ # __AGENT_NAME__
2
+
3
+ Scaffolded from the **tool-agent** template. Three nodes, shaped to show the difference
4
+ between a deterministic step and a real tool:
5
+
6
+ `normalize` (plain function — no tool span) → `analyze` (invokes a `langchain_core`
7
+ `@tool`, which gets its own `execute_tool` span) → `summarize` (LLM over the tool output).
8
+
9
+ Use a plain function for deterministic work the graph controls; use `@tool` when the step
10
+ should appear in traces on its own, or when the model should eventually choose it.
11
+
12
+ ## Local loop
13
+ ```bash
14
+ keystone agent validate .
15
+ keystone dev . --input '{"text": "keystone agents ship fast"}' --offline # iterate: edit → Enter → new behaviour
16
+ keystone agent run . --input '{"text": "keystone agents ship fast"}' --offline
17
+ ```
18
+
19
+ ## Deploy (dev)
20
+ ```bash
21
+ keystone login
22
+ keystone agent deploy . --publish
23
+ keystone agent invoke __AGENT_NAME__ --input '{"text": "keystone agents ship fast"}'
24
+ ```
25
+
26
+ Tips: wrap paid/side-effecting tools in `keystone.agent_sdk.durable_task`; pause for a
27
+ human with `keystone.agent_sdk.request_approval`. Rebuilds: bump `# bundle-rev:`.
28
+
29
+ Note: invoke a tool with `.invoke({...})`. Calling `word_stats.func(...)` bypasses
30
+ LangChain's callback manager, and the tool span disappears.
@@ -0,0 +1,25 @@
1
+ # bundle-rev: 0001 — bump this string to force a rebuild (agent-hub dedups identical bundles by SHA-256)
2
+ # __AGENT_NAME__ — scaffolded by `keystone agent init` (template: tool-agent).
3
+ # Local loop:
4
+ # keystone agent validate .
5
+ # keystone agent run . --input '{"text": "keystone agents ship fast"}' --offline
6
+ name: __AGENT_NAME__
7
+ workspace: __WORKSPACE__
8
+ framework: langgraph@1
9
+ entrypoint: __PKG__.graph:make_graph
10
+ runtime: python3.12
11
+ resources:
12
+ timeout_seconds: 60
13
+ io_schema:
14
+ type: object
15
+ properties:
16
+ text:
17
+ type: string
18
+ required: [text]
19
+ dependencies:
20
+ services: [llm-gateway]
21
+ models: [bedrock/anthropic.claude-sonnet-4-6]
22
+ identity:
23
+ scopes: [gateway:chat]
24
+ config:
25
+ RT_AGENT_MODEL: "bedrock/anthropic.claude-sonnet-4-6"
@@ -0,0 +1,10 @@
1
+ # Local-only environment for `__AGENT_NAME__`. NEVER committed (.gitignore) and NEVER packaged —
2
+ # `keystone agent deploy` drops .env* unconditionally, because a bundle goes to S3 and into the
3
+ # agent's image in ECR, where a copy would outlive a revoked key.
4
+ #
5
+ # On the cluster the operator injects these, so leave them empty here unless you run locally.
6
+
7
+ # The agent's platform API key. Create it on the portal (Access policy → API keys) and paste the
8
+ # value shown ONCE. Read automatically: agent-runtime settings use env_prefix="RT_" + env_file=".env",
9
+ # so the RT_ prefix is required — a differently-named variable is IGNORED SILENTLY.
10
+ RT_AGENT_API_KEY=
@@ -0,0 +1,7 @@
1
+ __pycache__/
2
+ *.pyc
3
+ .venv/
4
+ .pytest_cache/
5
+ # Secrets + local config. Also excluded from the deploy bundle unconditionally.
6
+ .env
7
+ .env.*
File without changes
@@ -0,0 +1,89 @@
1
+ """__AGENT_NAME__ — a deterministic step, a real tool, then an LLM summary.
2
+
3
+ Two things are easy to confuse, so this scaffold shows both side by side:
4
+
5
+ ``normalize`` a DETERMINISTIC STEP — an ordinary Python function in a node. The graph
6
+ decides when it runs. Right for parsers, formatters, calculators.
7
+ ``word_stats`` a TOOL — ``langchain_core.tools.tool``. Invoking it goes through
8
+ LangChain's callback manager, which is what makes the platform emit a
9
+ separate ``execute_tool`` span for it.
10
+
11
+ An ordinary function is invisible to tracing. That is not a bug — it is what "ordinary
12
+ function" means. Reach for ``@tool`` when you want the step to show up in a trace on its
13
+ own, or when you later want the model itself to decide when to call it.
14
+
15
+ Wrap paid or side-effecting work in ``keystone.agent_sdk.durable_task`` so a crash-resume
16
+ replays it instead of re-billing it.
17
+
18
+ Local loop:
19
+ keystone agent run . --input '{"text": "keystone agents ship fast"}' --offline
20
+ """
21
+
22
+ from __future__ import annotations
23
+
24
+ import os
25
+ from typing import Any, TypedDict
26
+
27
+ from keystone.agent_sdk.clients import GatewayClient
28
+ from langchain_core.tools import tool
29
+ from langgraph.graph import StateGraph
30
+
31
+
32
+ class State(TypedDict, total=False):
33
+ text: str
34
+ stats: dict[str, Any]
35
+ summary: str
36
+
37
+
38
+ @tool
39
+ def word_stats(text: str) -> dict[str, Any]:
40
+ """Count the words and characters in the text and find its longest word."""
41
+ words = text.split()
42
+ return {
43
+ "words": len(words),
44
+ "chars": len(text),
45
+ "longest": max(words, key=len) if words else "",
46
+ }
47
+
48
+
49
+ def normalize(state: State) -> dict[str, str]:
50
+ """Deterministic step: collapse whitespace. Plain function — no tool span, by design."""
51
+ return {"text": " ".join(state.get("text", "").split())}
52
+
53
+
54
+ def analyze(state: State) -> dict[str, Any]:
55
+ # `.invoke(...)` is what routes through the callback manager. Calling `word_stats.func(...)`
56
+ # — or an undecorated copy of the function — would skip tracing entirely.
57
+ return {"stats": word_stats.invoke({"text": state.get("text", "")})}
58
+
59
+
60
+ async def summarize(state: State) -> dict[str, str]:
61
+ out = await GatewayClient(
62
+ base_url=os.environ.get("RT_GATEWAY_URL", ""),
63
+ auth_token=os.environ.get("RT_GATEWAY_TOKEN", ""),
64
+ ).chat(
65
+ messages=[
66
+ {
67
+ "role": "system",
68
+ "content": "Summarize the text analysis in one friendly sentence.",
69
+ },
70
+ {
71
+ "role": "user",
72
+ "content": f"Text: {state.get('text', '')}\nStats: {state.get('stats', {})}",
73
+ },
74
+ ],
75
+ model=os.environ.get("RT_AGENT_MODEL", "bedrock/anthropic.claude-sonnet-4-6"),
76
+ )
77
+ return {"summary": out["choices"][0]["message"]["content"]}
78
+
79
+
80
+ def make_graph():
81
+ g = StateGraph(State)
82
+ g.add_node("normalize", normalize)
83
+ g.add_node("analyze", analyze)
84
+ g.add_node("summarize", summarize)
85
+ g.set_entry_point("normalize")
86
+ g.add_edge("normalize", "analyze")
87
+ g.add_edge("analyze", "summarize")
88
+ g.set_finish_point("summarize")
89
+ return g
@@ -0,0 +1,15 @@
1
+ [project]
2
+ name = "__AGENT_NAME__"
3
+ version = "0.1.0"
4
+ requires-python = ">=3.12"
5
+ # Declared for humans/IDEs: the DEPLOYED image is built FROM the platform base image,
6
+ # which already bakes keystone-agent-sdk + langgraph — the server-side (Kaniko) build
7
+ # copies your code only, it does NOT pip-install. Locally, `keystone agent validate/run`
8
+ # execute in the CLI's own environment.
9
+ dependencies = [
10
+ "keystone-agent-sdk>=0.3",
11
+ "langgraph>=1,<2",
12
+ # `@tool` lives here. It arrives transitively with langgraph anyway; declared because
13
+ # this agent imports it directly.
14
+ "langchain-core>=1,<2",
15
+ ]
@@ -0,0 +1,13 @@
1
+ Metadata-Version: 2.4
2
+ Name: keystone-cli
3
+ Version: 0.1.0
4
+ Summary: Keystone pro-code agent CLI — validate + run agents locally (FR-06 / FDP-3072, M1). login/deploy = M2.
5
+ Requires-Python: >=3.12
6
+ Requires-Dist: keystone-agent-sdk<0.4,>=0.3
7
+ Requires-Dist: keystone-request-context<0.4,>=0.3
8
+ Requires-Dist: typer<1,>=0.12
9
+ Requires-Dist: httpx<1,>=0.27
10
+ Provides-Extra: dev
11
+ Requires-Dist: pytest<9,>=8; extra == "dev"
12
+ Requires-Dist: pytest-cov<7,>=6; extra == "dev"
13
+ Requires-Dist: ruff==0.15.15; extra == "dev"
@@ -0,0 +1,54 @@
1
+ keystone_cli/__init__.py,sha256=-aiKKu19-axzXgLzrn9Kcu3L1LwrJA1YJVrSUQ5gl2k,257
2
+ keystone_cli/__main__.py,sha256=HkZ5axvf39JZCwMFEsmoOwdx5PklW7TJHBztG9TO3S0,683
3
+ keystone_cli/devloop.py,sha256=mmh0w1UQ6r6o_73osSZ9lPzGI7N-zhBmWPBAzDDUToI,8090
4
+ keystone_cli/platform_client.py,sha256=cIdOm9X9HYzOY5_I-kJj-b9Mbcy75t614gfliVqQLeY,3345
5
+ keystone_cli/runner.py,sha256=5Ku7xlPPz2-bDHUw_TU74g5uHj0ydTVr36LvWcHp5AU,3559
6
+ keystone_cli/scaffold.py,sha256=WYqbZjEEqVdoKUx-M2HUN-jmJBjn0cQlEqL_ZjCXloc,3852
7
+ keystone_cli/auth/__init__.py,sha256=I1Mz7isGsjGB_OEfB-K8cMFr8D_FlUyVcAtM7fHu96A,302
8
+ keystone_cli/auth/device_flow.py,sha256=NJesDn1jz8F_QlMS_l88TAju6MCgNaLuScNpCj8iAuI,8397
9
+ keystone_cli/auth/token_store.py,sha256=_o28-xSx89sHbp0kc2giI4E-K5E1RGitW48CJ0whA9Q,3599
10
+ keystone_cli/commands/__init__.py,sha256=oFTNkqo6ozKI9Bc1PYj9eY3UV2QwhmcqGVfp14RGfLQ,35
11
+ keystone_cli/commands/agent.py,sha256=D4jkyvKOgKyAiI0jak4pxGKLBTehUtuiJ3n2MdaKKWM,50464
12
+ keystone_cli/commands/dev.py,sha256=KguZcl8OKvG4j0vReGMsDcpJv8cJxGFOmpBlluMLN1U,2148
13
+ keystone_cli/commands/login.py,sha256=-T58PIJH6fDxZxFJQvS4s3t45EfFBlOtpOA7eUYm4XU,9037
14
+ keystone_cli/commands/workspace.py,sha256=oxKUU86_jC4ShtDdAAe6JdZCYeyOZa1dZUHv-cFi04k,3417
15
+ keystone_cli/templates/blank/README.md.tmpl,sha256=2iGKv-NAg4Cac_vXy_nSuN23gLY6eF5eRlBR0qfIwDQ,1047
16
+ keystone_cli/templates/blank/agent.yaml.tmpl,sha256=yWABX_689kmaH2oniOp3xewp2S-tfJzFPj4_9WrdJjY,636
17
+ keystone_cli/templates/blank/env.tmpl,sha256=je4pybAr2EOpvP3J37jm1AcvDIbCyDoR3u4IW0cHLhQ,664
18
+ keystone_cli/templates/blank/gitignore.tmpl,sha256=eB2IFyVuVnBvSoZwRyQjmIojEqSKMW6TF3yMIGyPuLM,133
19
+ keystone_cli/templates/blank/pyproject.toml.tmpl,sha256=S6RTmw2IKi_MBM-M9yyPJF8FqiY3cXO7gdmyLTlPf2s,455
20
+ keystone_cli/templates/blank/pkg/__init__.py.tmpl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ keystone_cli/templates/blank/pkg/graph.py.tmpl,sha256=QgkeiAM4zA7neo8lgEWl7w-y5j7zuFoEBl_-LnVkVpE,871
22
+ keystone_cli/templates/hitl/README.md.tmpl,sha256=ysGEQkc2aR093xyoNjDcxw7-LryLaLh39vWOPz-F42I,1239
23
+ keystone_cli/templates/hitl/agent.yaml.tmpl,sha256=UjYIemHEHzSgNwCsRLzPwdYb5_dUkwvoM4JhSy2KZRE,1252
24
+ keystone_cli/templates/hitl/env.tmpl,sha256=je4pybAr2EOpvP3J37jm1AcvDIbCyDoR3u4IW0cHLhQ,664
25
+ keystone_cli/templates/hitl/gitignore.tmpl,sha256=eB2IFyVuVnBvSoZwRyQjmIojEqSKMW6TF3yMIGyPuLM,133
26
+ keystone_cli/templates/hitl/pyproject.toml.tmpl,sha256=S6RTmw2IKi_MBM-M9yyPJF8FqiY3cXO7gdmyLTlPf2s,455
27
+ keystone_cli/templates/hitl/pkg/__init__.py.tmpl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
+ keystone_cli/templates/hitl/pkg/graph.py.tmpl,sha256=rIA-Hal96vsc02mdYDdP4Znxs2t0a-ZvMq3C2r_wTJk,4802
29
+ keystone_cli/templates/llm/README.md.tmpl,sha256=v2tXqDYk9icvXrSMGQlg45Bjh9cDjPj9C9-WVGv35u0,965
30
+ keystone_cli/templates/llm/agent.yaml.tmpl,sha256=uKX6nbwAi8n1tkv4NtfYKbMe2qqWEY7mKFp6C4DBuIU,1016
31
+ keystone_cli/templates/llm/env.tmpl,sha256=je4pybAr2EOpvP3J37jm1AcvDIbCyDoR3u4IW0cHLhQ,664
32
+ keystone_cli/templates/llm/gitignore.tmpl,sha256=eB2IFyVuVnBvSoZwRyQjmIojEqSKMW6TF3yMIGyPuLM,133
33
+ keystone_cli/templates/llm/pyproject.toml.tmpl,sha256=S6RTmw2IKi_MBM-M9yyPJF8FqiY3cXO7gdmyLTlPf2s,455
34
+ keystone_cli/templates/llm/pkg/__init__.py.tmpl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
+ keystone_cli/templates/llm/pkg/graph.py.tmpl,sha256=0OWCqXDcApIeWW_6mcDAzpZTG1wB_WCpd4azDZxxqOY,1756
36
+ keystone_cli/templates/rag-qa/README.md.tmpl,sha256=ON6l64BtVSJ5_NhLtVPqrjgIDtsOigp4DtC4ZENGeMw,783
37
+ keystone_cli/templates/rag-qa/agent.yaml.tmpl,sha256=VHdwo06DiFYI3rnnQXZh2QUXEq-06LBYtwE2Wze5tk8,1472
38
+ keystone_cli/templates/rag-qa/env.tmpl,sha256=je4pybAr2EOpvP3J37jm1AcvDIbCyDoR3u4IW0cHLhQ,664
39
+ keystone_cli/templates/rag-qa/gitignore.tmpl,sha256=eB2IFyVuVnBvSoZwRyQjmIojEqSKMW6TF3yMIGyPuLM,133
40
+ keystone_cli/templates/rag-qa/pyproject.toml.tmpl,sha256=S6RTmw2IKi_MBM-M9yyPJF8FqiY3cXO7gdmyLTlPf2s,455
41
+ keystone_cli/templates/rag-qa/pkg/__init__.py.tmpl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
+ keystone_cli/templates/rag-qa/pkg/graph.py.tmpl,sha256=t4Y4qfFWTk4JHOC4JJaFIaXWfZGGIOeBJF1SgaJz6f4,2365
43
+ keystone_cli/templates/tool-agent/README.md.tmpl,sha256=UomaxpVFXi9tc4WTmZTzWdRirrZpsBom-to-DZ0ngeY,1241
44
+ keystone_cli/templates/tool-agent/agent.yaml.tmpl,sha256=rNceN7I4lS_DbrCq773yo1qEtjhDa6FB4IAKZl9wg4c,749
45
+ keystone_cli/templates/tool-agent/env.tmpl,sha256=je4pybAr2EOpvP3J37jm1AcvDIbCyDoR3u4IW0cHLhQ,664
46
+ keystone_cli/templates/tool-agent/gitignore.tmpl,sha256=eB2IFyVuVnBvSoZwRyQjmIojEqSKMW6TF3yMIGyPuLM,133
47
+ keystone_cli/templates/tool-agent/pyproject.toml.tmpl,sha256=BvDojT7UOQRVtCYUMGpA_b08P5xKBo5l6fkz80XIOYw,611
48
+ keystone_cli/templates/tool-agent/pkg/__init__.py.tmpl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ keystone_cli/templates/tool-agent/pkg/graph.py.tmpl,sha256=HeToF39VCw-Rm9yfh0oIAB487qDLxn6GoX2698m7mxQ,3159
50
+ keystone_cli-0.1.0.dist-info/METADATA,sha256=nnRNsNAwrDgHIbE86onWDqkt-ys6GhFG34YsnKZTByA,505
51
+ keystone_cli-0.1.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
52
+ keystone_cli-0.1.0.dist-info/entry_points.txt,sha256=HvGzgggOltPLyQwPH28xYWUFX3dAHXolqyYSfGRoANE,55
53
+ keystone_cli-0.1.0.dist-info/top_level.txt,sha256=P5S_uzRQL2KlRkStMrOoBKxi_YkjhXgpvpFa7zPUi34,13
54
+ keystone_cli-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ keystone = keystone_cli.__main__:app
@@ -0,0 +1 @@
1
+ keystone_cli