Skip to content

Commit 7d9ae14

Browse files
authored
fix: remove unregistered PyPI packages from notebooks and requirements (dependency confusion) (#325)
- Replace !pip install agent-os with !pip install -e ../.. in all 6 notebooks; agent-os is not on PyPI and installing it from PyPI is a dependency confusion vector - Replace zendesk-sdk/freshdesk-sdk with zenpy/freshdesk (the real published SDKs) in customer-service/requirements.txt - Remove hashlib-compat from healthcare-hipaa/requirements.txt; hashlib is stdlib and hashlib-compat is not a real PyPI package
1 parent 21b5c18 commit 7d9ae14

File tree

8 files changed

+174
-171
lines changed

8 files changed

+174
-171
lines changed

packages/agent-os/examples/customer-service/requirements.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ openai>=1.0.0
99
anthropic>=0.18.0
1010

1111
# Ticket systems
12-
zendesk-sdk>=1.0.0
13-
freshdesk-sdk>=2.0.0
12+
# zendesk-sdk is NOT on PyPI — use 'zenpy' for the Zendesk API client
13+
zenpy>=2.0.0
14+
# freshdesk-sdk is NOT on PyPI — use 'freshdesk' for the Freshdesk API client
15+
freshdesk>=0.1.0
1416

1517
# Knowledge base
1618
pinecone-client>=3.0.0

packages/agent-os/examples/healthcare-hipaa/requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ structlog>=24.1.0
2929
python-json-logger>=2.0.0
3030

3131
# Compliance
32-
hashlib-compat>=1.0.0
32+
# hashlib-compat is NOT a real package — hashlib is part of Python's standard library
33+
# and requires no installation. Remove this line.
3334

3435
# Monitoring
3536
prometheus-client>=0.19.0

packages/agent-os/notebooks/01-hello-agent-os.ipynb

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"cell_type": "markdown",
55
"metadata": {},
66
"source": [
7-
"# 🚀 Hello Agent OS\n",
7+
"# \ud83d\ude80 Hello Agent OS\n",
88
"\n",
99
"> **Your first governed agent in under 5 minutes.**\n",
1010
"\n",
@@ -34,7 +34,7 @@
3434
"metadata": {},
3535
"outputs": [],
3636
"source": [
37-
"!pip install agent-os --quiet"
37+
"!pip install -e ../.. --quiet"
3838
]
3939
},
4040
{
@@ -57,7 +57,7 @@
5757
"# Create a kernel with strict policy enforcement\n",
5858
"kernel = KernelSpace(policy=\"strict\")\n",
5959
"\n",
60-
"print(\" Kernel initialized with 'strict' policy\")\n",
60+
"print(\"\u2705 Kernel initialized with 'strict' policy\")\n",
6161
"print(f\" Policy mode: {kernel.policy.mode}\")"
6262
]
6363
},
@@ -87,7 +87,7 @@
8787
" result = f\"Hello! I processed your task: {task}\"\n",
8888
" return result\n",
8989
"\n",
90-
"print(\" Agent registered with kernel\")"
90+
"print(\"\u2705 Agent registered with kernel\")"
9191
]
9292
},
9393
{
@@ -110,27 +110,27 @@
110110
"# Execute the agent\n",
111111
"result = await kernel.execute(hello_agent, \"Summarize today's news\")\n",
112112
"\n",
113-
"print(f\"\\n📤 Result: {result}\")"
113+
"print(f\"\\n\ud83d\udce4 Result: {result}\")"
114114
]
115115
},
116116
{
117117
"cell_type": "markdown",
118118
"metadata": {},
119119
"source": [
120-
"## 🎉 Congratulations!\n",
120+
"## \ud83c\udf89 Congratulations!\n",
121121
"\n",
122122
"You just ran your first governed agent. Here's what happened:\n",
123123
"\n",
124124
"```\n",
125-
"┌─────────────────────────────────────────────────────────┐\n",
126-
" USER SPACE \n",
127-
" hello_agent() executed here \n",
128-
"├─────────────────────────────────────────────────────────┤\n",
129-
" KERNEL SPACE \n",
130-
" Action checked against 'strict' policy \n",
131-
" No violations detected \n",
132-
" Result returned to user space \n",
133-
"└─────────────────────────────────────────────────────────┘\n",
125+
"\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n",
126+
"\u2502 USER SPACE \u2502\n",
127+
"\u2502 hello_agent() executed here \u2502\n",
128+
"\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n",
129+
"\u2502 KERNEL SPACE \u2502\n",
130+
"\u2502 \u2713 Action checked against 'strict' policy \u2502\n",
131+
"\u2502 \u2713 No violations detected \u2502\n",
132+
"\u2502 \u2713 Result returned to user space \u2502\n",
133+
"\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n",
134134
"```\n",
135135
"\n",
136136
"---"
@@ -162,7 +162,7 @@
162162
" \n",
163163
" return \"File written successfully\"\n",
164164
"\n",
165-
"print(\"⚠️ Agent registered - but it will be blocked...\")"
165+
"print(\"\u26a0\ufe0f Agent registered - but it will be blocked...\")"
166166
]
167167
},
168168
{
@@ -176,7 +176,7 @@
176176
" result = await kernel.execute(dangerous_agent, \"Write some data\")\n",
177177
" print(f\"Result: {result}\")\n",
178178
"except Exception as e:\n",
179-
" print(f\"🛑 BLOCKED: {e}\")\n",
179+
" print(f\"\ud83d\uded1 BLOCKED: {e}\")\n",
180180
" print(\"\\nThe kernel prevented the file write before it executed!\")"
181181
]
182182
},
@@ -281,4 +281,4 @@
281281
},
282282
"nbformat": 4,
283283
"nbformat_minor": 4
284-
}
284+
}

packages/agent-os/notebooks/02-episodic-memory-demo.ipynb

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"cell_type": "markdown",
55
"metadata": {},
66
"source": [
7-
"# 🧠 Episodic Memory Demo\n",
7+
"# \ud83e\udde0 Episodic Memory Demo\n",
88
"\n",
99
"> **Give your agents memory that persists and learns.**\n",
1010
"\n",
@@ -32,12 +32,12 @@
3232
"\n",
3333
"```\n",
3434
"Traditional DB: Episodic Memory:\n",
35-
"┌─────────────┐ ┌─────────────┐\n",
36-
" UPDATE APPEND ONLY \n",
37-
" DELETE NO UPDATE \n",
38-
" MODIFY NO DELETE \n",
39-
"└─────────────┘ └─────────────┘\n",
40-
" \n",
35+
"\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n",
36+
"\u2502 UPDATE \u2713 \u2502 \u2502 APPEND ONLY \u2502\n",
37+
"\u2502 DELETE \u2713 \u2502 \u2502 NO UPDATE \u2502\n",
38+
"\u2502 MODIFY \u2713 \u2502 \u2502 NO DELETE \u2502\n",
39+
"\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n",
40+
" \u2193 \u2193\n",
4141
" Audit gaps Full history\n",
4242
" State bugs Time-travel OK\n",
4343
"```\n",
@@ -58,7 +58,7 @@
5858
"metadata": {},
5959
"outputs": [],
6060
"source": [
61-
"!pip install agent-os emk --quiet"
61+
"!pip install -e ../.. emk --quiet"
6262
]
6363
},
6464
{
@@ -91,7 +91,7 @@
9191
"# Store it (immutable - can never be changed)\n",
9292
"store.store(episode)\n",
9393
"\n",
94-
"print(\" Episode stored!\")\n",
94+
"print(\"\u2705 Episode stored!\")\n",
9595
"print(f\" ID: {episode.id}\")\n",
9696
"print(f\" Timestamp: {episode.timestamp}\")\n",
9797
"print(f\" Goal: {episode.goal}\")"
@@ -142,9 +142,9 @@
142142
"\n",
143143
"for ep in episodes:\n",
144144
" store.store(ep)\n",
145-
" print(f\" Stored: {ep.goal[:40]}...\")\n",
145+
" print(f\"\u2705 Stored: {ep.goal[:40]}...\")\n",
146146
"\n",
147-
"print(f\"\\n📊 Total episodes in memory: {len(store)}\")"
147+
"print(f\"\\n\ud83d\udcca Total episodes in memory: {len(store)}\")"
148148
]
149149
},
150150
{
@@ -165,10 +165,10 @@
165165
"# Get all episodes\n",
166166
"all_episodes = store.list_all()\n",
167167
"\n",
168-
"print(\"📜 All Episodes:\")\n",
168+
"print(\"\ud83d\udcdc All Episodes:\")\n",
169169
"print(\"-\" * 60)\n",
170170
"for ep in all_episodes:\n",
171-
" status = \"\" if \"FAILED\" in ep.result else \"\"\n",
171+
" status = \"\u274c\" if \"FAILED\" in ep.result else \"\u2705\"\n",
172172
" print(f\"{status} {ep.timestamp.strftime('%Y-%m-%d %H:%M')} | {ep.goal[:40]}\")"
173173
]
174174
},
@@ -191,11 +191,11 @@
191191
"query = \"How to optimize slow database queries?\"\n",
192192
"similar = store.retrieve(query=query, k=3)\n",
193193
"\n",
194-
"print(f\"🔍 Query: {query}\")\n",
195-
"print(\"\\n📚 Relevant memories:\")\n",
194+
"print(f\"\ud83d\udd0d Query: {query}\")\n",
195+
"print(\"\\n\ud83d\udcda Relevant memories:\")\n",
196196
"print(\"-\" * 60)\n",
197197
"for ep in similar:\n",
198-
" print(f\"\\n🎯 Goal: {ep.goal}\")\n",
198+
" print(f\"\\n\ud83c\udfaf Goal: {ep.goal}\")\n",
199199
" print(f\" Action: {ep.action}\")\n",
200200
" print(f\" Learning: {ep.reflection}\")"
201201
]
@@ -229,7 +229,7 @@
229229
")\n",
230230
"\n",
231231
"store.store(failed_episode)\n",
232-
"print(\" Failure recorded!\")\n",
232+
"print(\"\u274c Failure recorded!\")\n",
233233
"print(f\" Reason: {failed_episode.failure_reason}\")"
234234
]
235235
},
@@ -242,14 +242,14 @@
242242
"# Retrieve both successes and failures\n",
243243
"patterns = store.retrieve_with_anti_patterns()\n",
244244
"\n",
245-
"print(\"📊 Memory Analysis:\")\n",
246-
"print(f\" Successes: {len(patterns['successes'])}\")\n",
247-
"print(f\" Failures: {len(patterns['failures'])}\")\n",
245+
"print(\"\ud83d\udcca Memory Analysis:\")\n",
246+
"print(f\" \u2705 Successes: {len(patterns['successes'])}\")\n",
247+
"print(f\" \u274c Failures: {len(patterns['failures'])}\")\n",
248248
"\n",
249249
"if patterns['failures']:\n",
250-
" print(\"\\n⚠️ Things to avoid:\")\n",
250+
" print(\"\\n\u26a0\ufe0f Things to avoid:\")\n",
251251
" for fail in patterns['failures']:\n",
252-
" print(f\" {fail.goal}: {fail.failure_reason}\")"
252+
" print(f\" \u2022 {fail.goal}: {fail.failure_reason}\")"
253253
]
254254
},
255255
{
@@ -278,7 +278,7 @@
278278
"# Run compression\n",
279279
"result = compressor.compress_old_episodes()\n",
280280
"\n",
281-
"print(\"🌙 Sleep Cycle Complete!\")\n",
281+
"print(\"\ud83c\udf19 Sleep Cycle Complete!\")\n",
282282
"print(f\" Episodes processed: {result['episodes_processed']}\")\n",
283283
"print(f\" Rules generated: {result['rules_generated']}\")\n",
284284
"print(f\" Storage saved: {result['storage_saved_percent']}%\")"
@@ -291,11 +291,11 @@
291291
"outputs": [],
292292
"source": [
293293
"# View generated rules\n",
294-
"print(\"📖 Semantic Rules (distilled knowledge):\")\n",
294+
"print(\"\ud83d\udcd6 Semantic Rules (distilled knowledge):\")\n",
295295
"print(\"-\" * 60)\n",
296296
"for rule in result['rules']:\n",
297-
" print(f\"\\n {rule['pattern']}\")\n",
298-
" print(f\" {rule['insight']}\")"
297+
" print(f\"\\n\u2022 {rule['pattern']}\")\n",
298+
" print(f\" \u2192 {rule['insight']}\")"
299299
]
300300
},
301301
{
@@ -328,7 +328,7 @@
328328
" \n",
329329
" # 2. Build context from past experiences\n",
330330
" context = \"\\n\".join([\n",
331-
" f\"Past: {ep.goal} {ep.reflection}\" \n",
331+
" f\"Past: {ep.goal} \u2192 {ep.reflection}\" \n",
332332
" for ep in relevant\n",
333333
" ])\n",
334334
" \n",
@@ -348,7 +348,7 @@
348348
"\n",
349349
"# Execute\n",
350350
"result = await kernel.execute(learning_agent, \"Optimize the sales dashboard\")\n",
351-
"print(f\"\\n📤 Result: {result}\")"
351+
"print(f\"\\n\ud83d\udce4 Result: {result}\")"
352352
]
353353
},
354354
{
@@ -370,7 +370,7 @@
370370
"for f in [\"demo_memory.jsonl\", \"agent_memories.jsonl\"]:\n",
371371
" if os.path.exists(f):\n",
372372
" os.remove(f)\n",
373-
" print(f\"🗑️ Removed {f}\")"
373+
" print(f\"\ud83d\uddd1\ufe0f Removed {f}\")"
374374
]
375375
},
376376
{
@@ -432,4 +432,4 @@
432432
},
433433
"nbformat": 4,
434434
"nbformat_minor": 4
435-
}
435+
}

0 commit comments

Comments
 (0)