artemys 0.1.0 → 0.2.0
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.
- package/README.md +182 -26
- package/dist/agent/capabilities.d.ts +23 -0
- package/dist/agent/capabilities.d.ts.map +1 -0
- package/dist/agent/capabilities.js +87 -0
- package/dist/agent/capabilities.js.map +1 -0
- package/dist/agent/context-provider.d.ts +12 -0
- package/dist/agent/context-provider.d.ts.map +1 -0
- package/dist/agent/context-provider.js +34 -0
- package/dist/agent/context-provider.js.map +1 -0
- package/dist/agent/context.d.ts +3 -1
- package/dist/agent/context.d.ts.map +1 -1
- package/dist/agent/context.js +15 -15
- package/dist/agent/context.js.map +1 -1
- package/dist/agent/index.d.ts +7 -4
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +5 -3
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/notifications/decision-parser.d.ts +10 -0
- package/dist/agent/notifications/decision-parser.d.ts.map +1 -0
- package/dist/agent/notifications/decision-parser.js +21 -0
- package/dist/agent/notifications/decision-parser.js.map +1 -0
- package/dist/agent/notifications/index.d.ts +4 -0
- package/dist/agent/notifications/index.d.ts.map +1 -0
- package/dist/agent/notifications/index.js +3 -0
- package/dist/agent/notifications/index.js.map +1 -0
- package/dist/agent/notifications/opportunity-templates.d.ts +14 -0
- package/dist/agent/notifications/opportunity-templates.d.ts.map +1 -0
- package/dist/agent/notifications/opportunity-templates.js +21 -0
- package/dist/agent/notifications/opportunity-templates.js.map +1 -0
- package/dist/agent/notifications/types.d.ts +16 -0
- package/dist/agent/notifications/types.d.ts.map +1 -0
- package/dist/agent/notifications/types.js +2 -0
- package/dist/agent/notifications/types.js.map +1 -0
- package/dist/agent/runtime.d.ts +36 -2
- package/dist/agent/runtime.d.ts.map +1 -1
- package/dist/agent/runtime.js +125 -8
- package/dist/agent/runtime.js.map +1 -1
- package/dist/agent/scanning/index.d.ts +3 -0
- package/dist/agent/scanning/index.d.ts.map +1 -0
- package/dist/agent/scanning/index.js +3 -0
- package/dist/agent/scanning/index.js.map +1 -0
- package/dist/agent/scanning/opportunity-scorer.d.ts +24 -0
- package/dist/agent/scanning/opportunity-scorer.d.ts.map +1 -0
- package/dist/agent/scanning/opportunity-scorer.js +90 -0
- package/dist/agent/scanning/opportunity-scorer.js.map +1 -0
- package/dist/agent/scanning/types.d.ts +65 -0
- package/dist/agent/scanning/types.d.ts.map +1 -0
- package/dist/agent/scanning/types.js +32 -0
- package/dist/agent/scanning/types.js.map +1 -0
- package/dist/agent/scheduler.d.ts +20 -4
- package/dist/agent/scheduler.d.ts.map +1 -1
- package/dist/agent/scheduler.js +66 -42
- package/dist/agent/scheduler.js.map +1 -1
- package/dist/agent/session.d.ts +4 -1
- package/dist/agent/session.d.ts.map +1 -1
- package/dist/agent/session.js +3 -1
- package/dist/agent/session.js.map +1 -1
- package/dist/agent/stores.d.ts +48 -0
- package/dist/agent/stores.d.ts.map +1 -0
- package/dist/agent/stores.js +2 -0
- package/dist/agent/stores.js.map +1 -0
- package/dist/connectors/google-calendar.d.ts +8 -0
- package/dist/connectors/google-calendar.d.ts.map +1 -0
- package/dist/connectors/google-calendar.js +23 -0
- package/dist/connectors/google-calendar.js.map +1 -0
- package/dist/connectors/google-gmail.d.ts +8 -0
- package/dist/connectors/google-gmail.d.ts.map +1 -0
- package/dist/connectors/google-gmail.js +30 -0
- package/dist/connectors/google-gmail.js.map +1 -0
- package/dist/connectors/google-oauth.d.ts +17 -0
- package/dist/connectors/google-oauth.d.ts.map +1 -0
- package/dist/connectors/google-oauth.js +52 -0
- package/dist/connectors/google-oauth.js.map +1 -0
- package/dist/connectors/index.d.ts +5 -0
- package/dist/connectors/index.d.ts.map +1 -0
- package/dist/connectors/index.js +5 -0
- package/dist/connectors/index.js.map +1 -0
- package/dist/connectors/types.d.ts +20 -0
- package/dist/connectors/types.d.ts.map +1 -0
- package/dist/connectors/types.js +5 -0
- package/dist/connectors/types.js.map +1 -0
- package/dist/discovery/agent-card.schema.d.ts +2 -2
- package/dist/integrations/index.d.ts +2 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +2 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/job-boards/ashby.d.ts +3 -0
- package/dist/integrations/job-boards/ashby.d.ts.map +1 -0
- package/dist/integrations/job-boards/ashby.js +80 -0
- package/dist/integrations/job-boards/ashby.js.map +1 -0
- package/dist/integrations/job-boards/greenhouse.d.ts +3 -0
- package/dist/integrations/job-boards/greenhouse.d.ts.map +1 -0
- package/dist/integrations/job-boards/greenhouse.js +34 -0
- package/dist/integrations/job-boards/greenhouse.js.map +1 -0
- package/dist/integrations/job-boards/http.d.ts +6 -0
- package/dist/integrations/job-boards/http.d.ts.map +1 -0
- package/dist/integrations/job-boards/http.js +63 -0
- package/dist/integrations/job-boards/http.js.map +1 -0
- package/dist/integrations/job-boards/index.d.ts +10 -0
- package/dist/integrations/job-boards/index.d.ts.map +1 -0
- package/dist/integrations/job-boards/index.js +43 -0
- package/dist/integrations/job-boards/index.js.map +1 -0
- package/dist/integrations/job-boards/jsonld.d.ts +4 -0
- package/dist/integrations/job-boards/jsonld.d.ts.map +1 -0
- package/dist/integrations/job-boards/jsonld.js +116 -0
- package/dist/integrations/job-boards/jsonld.js.map +1 -0
- package/dist/integrations/job-boards/lever.d.ts +3 -0
- package/dist/integrations/job-boards/lever.d.ts.map +1 -0
- package/dist/integrations/job-boards/lever.js +37 -0
- package/dist/integrations/job-boards/lever.js.map +1 -0
- package/dist/integrations/job-boards/remotive.d.ts +26 -0
- package/dist/integrations/job-boards/remotive.d.ts.map +1 -0
- package/dist/integrations/job-boards/remotive.js +75 -0
- package/dist/integrations/job-boards/remotive.js.map +1 -0
- package/dist/integrations/job-boards/types.d.ts +25 -0
- package/dist/integrations/job-boards/types.d.ts.map +1 -0
- package/dist/integrations/job-boards/types.js +2 -0
- package/dist/integrations/job-boards/types.js.map +1 -0
- package/dist/protocol/handshake.schema.d.ts +16 -16
- package/dist/protocol/message.schema.d.ts +16 -16
- package/package.json +17 -1
package/README.md
CHANGED
|
@@ -1,8 +1,100 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<img src="https://raw.githubusercontent.com/artemyshq/artemys/main/.github/assets/artie-icon.svg" width="52" alt="Artie">
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
<h1>A R T E M Y S</h1>
|
|
6
|
+
|
|
7
|
+
**The open ecosystem for agent-to-agent career communication**
|
|
8
|
+
|
|
9
|
+
*Athletes have agents. Executives have agents. Actors have agents.<br>
|
|
10
|
+
Now everyone does.*
|
|
11
|
+
|
|
12
|
+
<br>
|
|
13
|
+
|
|
14
|
+
[](https://www.npmjs.com/package/artemys)
|
|
15
|
+
[](LICENSE)
|
|
16
|
+
[](https://www.typescriptlang.org/)
|
|
17
|
+
[](https://github.com/artemyshq/artemys)
|
|
18
|
+
|
|
19
|
+
**[Vision](docs/VISION.md)** · **[Docs](docs/)** · **[Protocol Spec](protocol/)** · **[npm](https://www.npmjs.com/package/artemys)**
|
|
20
|
+
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## The Problem
|
|
26
|
+
|
|
27
|
+
Every hiring system in the market was built for the old world. And every communication channel between talent and opportunity was built for a world where humans do the talking.
|
|
28
|
+
|
|
29
|
+
**The systems are broken.** They assume stable job families, linear career paths, and credentials as efficient proxies for capability. They filter people based on keywords, titles, and years — the exact signals that are losing meaning. 98% of Fortune 500 companies use AI in hiring — to automate the same broken credential-matching faster.
|
|
30
|
+
|
|
31
|
+
**The communication is broken.** Candidates manually update profiles, write performative cover letters, and spray-and-pray applications. Recruiters send mass outreach that gets ignored. Both sides spend 90% of their time on overhead and 10% on signal. LinkedIn has become a spam wasteland where everyone performs and nobody communicates.
|
|
32
|
+
|
|
33
|
+
**The result:** The recruiter who ships production software gets filtered out because they're "not an engineer on paper." Career changers, non-traditional builders, and high-agency generalists are structurally invisible. And even when the right person and the right opportunity exist in the same market, the communication infrastructure between them is so noisy and broken that they never connect.
|
|
34
|
+
|
|
35
|
+
The industry is racing to automate the existing process faster. Nobody is asking whether the process itself is wrong.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## You Deserve Representation
|
|
40
|
+
|
|
41
|
+
Athletes have agents. Executives have agents. Actors have agents.
|
|
42
|
+
|
|
43
|
+
These agents exist because **talent shouldn't have to sell itself**. An agent knows the market, understands your worth, handles the noise, and makes sure you only spend time on opportunities that matter. They represent your interests — not the buyer's.
|
|
44
|
+
|
|
45
|
+
Why doesn't everyone have this?
|
|
46
|
+
|
|
47
|
+
Because until now, it didn't scale. A human agent for every professional in the world isn't possible. **But an AI agent is.** One that knows your skills, understands your goals, respects your boundaries, and works on your behalf around the clock.
|
|
48
|
+
|
|
49
|
+
**That's what Artemys makes possible.**
|
|
50
|
+
|
|
51
|
+
Artemys is the open ecosystem for building career agents — the protocol they speak, the schemas they validate against, the runtime they run on, and the discovery layer where they find each other. Anyone can build a candidate agent or a talent agent on top of it.
|
|
52
|
+
|
|
53
|
+
> **The candidate sets direction and boundaries. Their agent handles everything else.**
|
|
54
|
+
|
|
55
|
+
We're building **[Artie](https://artemys.ai)** — a candidate agent powered by Artemys. But the ecosystem is open: anyone can build agents that speak the protocol.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## How It Works
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
You Company
|
|
63
|
+
│ │
|
|
64
|
+
┌────▼──────┐ ◆ Artemys Protocol ◆ ┌──────────▼──┐
|
|
65
|
+
│ Your Agent │◄──────────────────────────►│ Talent Agent │
|
|
66
|
+
│(e.g. Artie)│ discover → handshake → │ (Theirs) │
|
|
67
|
+
└────────────┘ consent → dialogue → └──────────────┘
|
|
68
|
+
resolution
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
When both sides have agents, professional career communication transforms:
|
|
72
|
+
|
|
73
|
+
| Today (Human-to-Human) | Artemys (Agent-to-Agent) |
|
|
74
|
+
|-------------------------|--------------------------|
|
|
75
|
+
| Recruiter sends cold email | Talent agent queries candidate Arties matching real criteria |
|
|
76
|
+
| Candidate ignores 95% of messages | Artie evaluates and silently declines irrelevant queries |
|
|
77
|
+
| Candidate manually tailors resume per app | Artie shares relevant evidence contextually |
|
|
78
|
+
| Both sides guess at fit through phone screens | Agents exchange structured information progressively |
|
|
79
|
+
| Humans spend weeks on discovery | Agents resolve fit in hours; humans meet when it matters |
|
|
80
|
+
| Ghosting, black holes, no feedback | Every interaction resolves: mutual interest, decline, or defer |
|
|
81
|
+
|
|
82
|
+
**Consent is structural.** Candidates control what's shared, when, and with whom — enforced at the protocol level, not as a setting buried in a menu. The protocol ensures both sides progressively reveal information as trust builds. Neither side dumps everything upfront.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## What We're Building
|
|
87
|
+
|
|
88
|
+
| We ARE Building | We Are NOT Building |
|
|
89
|
+
|-----------------|---------------------|
|
|
90
|
+
| Agent-to-agent career communication protocol | A LinkedIn replacement or job board |
|
|
91
|
+
| Personal career agents that represent candidates 24/7 | A passive profile platform |
|
|
92
|
+
| Autonomous talent agents that DO the job | AI tools that help humans do jobs faster |
|
|
93
|
+
| Skills-based, agency-aware screening | Faster credential matching |
|
|
94
|
+
| Open protocol anyone can build on | A walled garden |
|
|
95
|
+
| Consent-native communication | Opt-out-only spam |
|
|
96
|
+
|
|
97
|
+
---
|
|
6
98
|
|
|
7
99
|
## Install
|
|
8
100
|
|
|
@@ -12,11 +104,46 @@ npm install artemys
|
|
|
12
104
|
bun add artemys
|
|
13
105
|
```
|
|
14
106
|
|
|
107
|
+
## Quick Example
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
import { HandshakeInitiateSchema, PROTOCOL_VERSION } from "artemys"
|
|
111
|
+
import { AgentCardSchema } from "artemys/discovery"
|
|
112
|
+
import { ArtemysRuntime, loadConfig } from "artemys/agent"
|
|
113
|
+
|
|
114
|
+
// Every agent starts with a card — who you are, what you can do
|
|
115
|
+
const card = AgentCardSchema.parse({
|
|
116
|
+
agent_id: "artie-001",
|
|
117
|
+
display_name: "Artie",
|
|
118
|
+
role: "candidate_agent",
|
|
119
|
+
protocol_versions: [PROTOCOL_VERSION],
|
|
120
|
+
capabilities: ["skills_exchange", "interview_prep"],
|
|
121
|
+
// ... endpoints, policy, attestation
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
// Start the runtime — your agent goes live
|
|
125
|
+
const runtime = new ArtemysRuntime(loadConfig())
|
|
126
|
+
await runtime.start()
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Architecture
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
artemys
|
|
135
|
+
├── 📋 Protocol Zod schemas · state machine · message validation
|
|
136
|
+
├── ☕ Discovery Agent cards · registration · intro ("Coffee Shop")
|
|
137
|
+
├── 🤖 Agent Runtime · tools · scheduling · MCP integration
|
|
138
|
+
├── 📡 Channels Telegram adapter · channel registry
|
|
139
|
+
└── ⚡ CLI onboard · doctor · start
|
|
140
|
+
```
|
|
141
|
+
|
|
15
142
|
## Modules
|
|
16
143
|
|
|
17
|
-
### Protocol
|
|
144
|
+
### 📋 Protocol
|
|
18
145
|
|
|
19
|
-
Zod schemas for the
|
|
146
|
+
Typed Zod schemas for the full conversation lifecycle — handshake, consent gates, dialogue, and resolution.
|
|
20
147
|
|
|
21
148
|
```typescript
|
|
22
149
|
import { HandshakeInitiateSchema, PROTOCOL_VERSION } from "artemys"
|
|
@@ -24,55 +151,84 @@ import { HandshakeInitiateSchema, PROTOCOL_VERSION } from "artemys"
|
|
|
24
151
|
import { HandshakeInitiateSchema } from "artemys/protocol"
|
|
25
152
|
```
|
|
26
153
|
|
|
27
|
-
|
|
154
|
+
Includes `Envelope`, `ConversationState`, state machine transitions, `ConsentProfile`, `ConsentGate`, `FitAssessment`, and 20+ message schemas covering every phase of agent-to-agent communication.
|
|
155
|
+
|
|
156
|
+
### ☕ Discovery
|
|
28
157
|
|
|
29
|
-
|
|
158
|
+
The "Coffee Shop" layer — where agents find each other, exchange cards, and bootstrap sessions.
|
|
30
159
|
|
|
31
160
|
```typescript
|
|
32
161
|
import { AgentCardSchema, DiscoveryQuerySchema } from "artemys/discovery"
|
|
33
162
|
```
|
|
34
163
|
|
|
35
|
-
|
|
164
|
+
Includes `AgentCard`, `DiscoveryQuery`, `IntroRequest`, `SessionBootstrap`, and relay/direct handoff flows.
|
|
36
165
|
|
|
37
|
-
|
|
166
|
+
### 🤖 Agent
|
|
167
|
+
|
|
168
|
+
Runtime framework for building career agents with built-in tools, task scheduling, browser automation, and MCP integration.
|
|
38
169
|
|
|
39
170
|
```typescript
|
|
40
171
|
import { ArtemysRuntime, loadConfig } from "artemys/agent"
|
|
41
172
|
```
|
|
42
173
|
|
|
43
|
-
|
|
174
|
+
**Built-in tools:** career advice · resume generation · market data · job search · web search · browser automation · memory · shell · task scheduling
|
|
175
|
+
|
|
176
|
+
### 📡 Channels
|
|
44
177
|
|
|
45
|
-
Communication adapters
|
|
178
|
+
Communication adapters for reaching agents wherever they are.
|
|
46
179
|
|
|
47
180
|
```typescript
|
|
48
181
|
import { TelegramAdapter } from "artemys/channels/telegram"
|
|
182
|
+
import { ChannelRegistry } from "artemys/channels"
|
|
49
183
|
```
|
|
50
184
|
|
|
51
|
-
### CLI
|
|
185
|
+
### ⚡ CLI
|
|
52
186
|
|
|
53
187
|
```bash
|
|
54
|
-
artemys onboard # Guided setup
|
|
55
|
-
artemys doctor # Validate
|
|
56
|
-
artemys start #
|
|
188
|
+
artemys onboard # Guided agent setup
|
|
189
|
+
artemys doctor # Validate your configuration
|
|
190
|
+
artemys start # Launch your agent
|
|
57
191
|
```
|
|
58
192
|
|
|
193
|
+
---
|
|
194
|
+
|
|
59
195
|
## Ecosystem
|
|
60
196
|
|
|
61
|
-
|
|
|
62
|
-
|
|
63
|
-
|
|
|
64
|
-
|
|
|
65
|
-
|
|
|
197
|
+
| | Component | Role |
|
|
198
|
+
|---|-----------|------|
|
|
199
|
+
| 🔷 | **[artemys](https://github.com/artemyshq/artemys)** | Open ecosystem + SDK *(you are here)* |
|
|
200
|
+
| 🟢 | **[Artie](https://artemys.ai)** | Reference candidate agent — your personal career agent |
|
|
201
|
+
| 🟠 | **Talent Agents** | Employer-side agents — anyone can build one using the protocol |
|
|
202
|
+
|
|
203
|
+
The protocol is open. The SDK is open. Build your own agent, extend the protocol, or use Artie out of the box.
|
|
204
|
+
|
|
205
|
+
---
|
|
66
206
|
|
|
67
207
|
## Development
|
|
68
208
|
|
|
69
209
|
```bash
|
|
70
|
-
bun install
|
|
71
|
-
bun run build
|
|
72
|
-
bun run test
|
|
73
|
-
bun run type-check
|
|
210
|
+
bun install # Install dependencies
|
|
211
|
+
bun run build # Build the SDK
|
|
212
|
+
bun run test # Run 155+ tests
|
|
213
|
+
bun run type-check # TypeScript validation
|
|
214
|
+
bun run protocol:check # Protocol conformance tests
|
|
74
215
|
```
|
|
75
216
|
|
|
76
|
-
##
|
|
217
|
+
## Docs
|
|
218
|
+
|
|
219
|
+
| | Document | Covers |
|
|
220
|
+
|---|---------|--------|
|
|
221
|
+
| 📖 | **[Vision](docs/VISION.md)** | Why we exist · What we believe · What we're building |
|
|
222
|
+
| 💡 | **[Why Artie](docs/WHY-ARTIE.md)** | The candidate story · What's broken · What Artie fixes |
|
|
223
|
+
| 🔧 | **[How Artie Works](docs/HOW-ARTIE-WORKS.md)** | Product and technical reference |
|
|
224
|
+
| 📋 | **[Protocol Spec](protocol/)** | Normative docs · Fixtures · Conformance checklist |
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
<div align="center">
|
|
229
|
+
|
|
230
|
+
**Built for a world where talent has representation.**
|
|
231
|
+
|
|
232
|
+
[MIT License](LICENSE)
|
|
77
233
|
|
|
78
|
-
|
|
234
|
+
</div>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const CAPABILITY_KEYS: readonly ["files.upload", "files.read", "files.search", "connectors.gmail.read", "connectors.calendar.read", "connectors.gmail.send", "browser.operate", "browser.submit"];
|
|
2
|
+
export type CapabilityKey = (typeof CAPABILITY_KEYS)[number];
|
|
3
|
+
export type CapabilityCatalogEntry = {
|
|
4
|
+
key: CapabilityKey;
|
|
5
|
+
label: string;
|
|
6
|
+
description: string;
|
|
7
|
+
defaultEnabled: boolean;
|
|
8
|
+
defaultDecisionRequired: boolean;
|
|
9
|
+
phase: 1 | 2 | 3 | 4;
|
|
10
|
+
};
|
|
11
|
+
export declare const CAPABILITY_CATALOG: CapabilityCatalogEntry[];
|
|
12
|
+
export type CapabilityGrantState = {
|
|
13
|
+
capability: CapabilityKey;
|
|
14
|
+
enabled: boolean;
|
|
15
|
+
decisionRequired: boolean;
|
|
16
|
+
};
|
|
17
|
+
export type CapabilityGrantStore = {
|
|
18
|
+
getGrants(userId: string): Promise<CapabilityGrantState[]>;
|
|
19
|
+
setGrant(userId: string, grant: CapabilityGrantState): Promise<void>;
|
|
20
|
+
};
|
|
21
|
+
export declare function isCapabilityKey(value: string): value is CapabilityKey;
|
|
22
|
+
export declare function defaultCapabilityStates(): CapabilityGrantState[];
|
|
23
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/agent/capabilities.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,4KASlB,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAE5D,MAAM,MAAM,sBAAsB,GAAG;IACnC,GAAG,EAAE,aAAa,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,OAAO,CAAA;IACvB,uBAAuB,EAAE,OAAO,CAAA;IAChC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,sBAAsB,EAmEtD,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,aAAa,CAAA;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,gBAAgB,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAA;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACrE,CAAA;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,aAAa,CAErE;AAED,wBAAgB,uBAAuB,IAAI,oBAAoB,EAAE,CAMhE"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
export const CAPABILITY_KEYS = [
|
|
2
|
+
"files.upload",
|
|
3
|
+
"files.read",
|
|
4
|
+
"files.search",
|
|
5
|
+
"connectors.gmail.read",
|
|
6
|
+
"connectors.calendar.read",
|
|
7
|
+
"connectors.gmail.send",
|
|
8
|
+
"browser.operate",
|
|
9
|
+
"browser.submit",
|
|
10
|
+
];
|
|
11
|
+
export const CAPABILITY_CATALOG = [
|
|
12
|
+
{
|
|
13
|
+
key: "files.upload",
|
|
14
|
+
label: "Upload files",
|
|
15
|
+
description: "Allow Artie to receive files you explicitly upload.",
|
|
16
|
+
defaultEnabled: true,
|
|
17
|
+
defaultDecisionRequired: false,
|
|
18
|
+
phase: 1,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
key: "files.read",
|
|
22
|
+
label: "Read uploaded files",
|
|
23
|
+
description: "Allow Artie to read and reason over uploaded files.",
|
|
24
|
+
defaultEnabled: true,
|
|
25
|
+
defaultDecisionRequired: false,
|
|
26
|
+
phase: 1,
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
key: "files.search",
|
|
30
|
+
label: "Search uploaded files",
|
|
31
|
+
description: "Allow Artie to search across uploaded documents.",
|
|
32
|
+
defaultEnabled: true,
|
|
33
|
+
defaultDecisionRequired: false,
|
|
34
|
+
phase: 1,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
key: "connectors.gmail.read",
|
|
38
|
+
label: "Read Gmail",
|
|
39
|
+
description: "Allow Artie to read message metadata from your Gmail connector.",
|
|
40
|
+
defaultEnabled: false,
|
|
41
|
+
defaultDecisionRequired: false,
|
|
42
|
+
phase: 2,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
key: "connectors.calendar.read",
|
|
46
|
+
label: "Read Calendar",
|
|
47
|
+
description: "Allow Artie to read upcoming events from your calendar connector.",
|
|
48
|
+
defaultEnabled: false,
|
|
49
|
+
defaultDecisionRequired: false,
|
|
50
|
+
phase: 2,
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
key: "connectors.gmail.send",
|
|
54
|
+
label: "Send Gmail drafts",
|
|
55
|
+
description: "Allow Artie to prepare outbound drafts; decisions remain required.",
|
|
56
|
+
defaultEnabled: false,
|
|
57
|
+
defaultDecisionRequired: true,
|
|
58
|
+
phase: 3,
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
key: "browser.operate",
|
|
62
|
+
label: "Operate browser",
|
|
63
|
+
description: "Allow Artie to navigate job sites, fill forms, and gather evidence during applications.",
|
|
64
|
+
defaultEnabled: false,
|
|
65
|
+
defaultDecisionRequired: false,
|
|
66
|
+
phase: 3,
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
key: "browser.submit",
|
|
70
|
+
label: "Submit applications",
|
|
71
|
+
description: "Allow Artie to execute final submit actions on application forms.",
|
|
72
|
+
defaultEnabled: false,
|
|
73
|
+
defaultDecisionRequired: false,
|
|
74
|
+
phase: 4,
|
|
75
|
+
},
|
|
76
|
+
];
|
|
77
|
+
export function isCapabilityKey(value) {
|
|
78
|
+
return CAPABILITY_KEYS.includes(value);
|
|
79
|
+
}
|
|
80
|
+
export function defaultCapabilityStates() {
|
|
81
|
+
return CAPABILITY_CATALOG.map((entry) => ({
|
|
82
|
+
capability: entry.key,
|
|
83
|
+
enabled: entry.defaultEnabled,
|
|
84
|
+
decisionRequired: entry.defaultDecisionRequired,
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/agent/capabilities.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,cAAc;IACd,YAAY;IACZ,cAAc;IACd,uBAAuB;IACvB,0BAA0B;IAC1B,uBAAuB;IACvB,iBAAiB;IACjB,gBAAgB;CACR,CAAA;AAaV,MAAM,CAAC,MAAM,kBAAkB,GAA6B;IAC1D;QACE,GAAG,EAAE,cAAc;QACnB,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,qDAAqD;QAClE,cAAc,EAAE,IAAI;QACpB,uBAAuB,EAAE,KAAK;QAC9B,KAAK,EAAE,CAAC;KACT;IACD;QACE,GAAG,EAAE,YAAY;QACjB,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,qDAAqD;QAClE,cAAc,EAAE,IAAI;QACpB,uBAAuB,EAAE,KAAK;QAC9B,KAAK,EAAE,CAAC;KACT;IACD;QACE,GAAG,EAAE,cAAc;QACnB,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,kDAAkD;QAC/D,cAAc,EAAE,IAAI;QACpB,uBAAuB,EAAE,KAAK;QAC9B,KAAK,EAAE,CAAC;KACT;IACD;QACE,GAAG,EAAE,uBAAuB;QAC5B,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,iEAAiE;QAC9E,cAAc,EAAE,KAAK;QACrB,uBAAuB,EAAE,KAAK;QAC9B,KAAK,EAAE,CAAC;KACT;IACD;QACE,GAAG,EAAE,0BAA0B;QAC/B,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,mEAAmE;QAChF,cAAc,EAAE,KAAK;QACrB,uBAAuB,EAAE,KAAK;QAC9B,KAAK,EAAE,CAAC;KACT;IACD;QACE,GAAG,EAAE,uBAAuB;QAC5B,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,oEAAoE;QACjF,cAAc,EAAE,KAAK;QACrB,uBAAuB,EAAE,IAAI;QAC7B,KAAK,EAAE,CAAC;KACT;IACD;QACE,GAAG,EAAE,iBAAiB;QACtB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,yFAAyF;QAC3F,cAAc,EAAE,KAAK;QACrB,uBAAuB,EAAE,KAAK;QAC9B,KAAK,EAAE,CAAC;KACT;IACD;QACE,GAAG,EAAE,gBAAgB;QACrB,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,mEAAmE;QACrE,cAAc,EAAE,KAAK;QACrB,uBAAuB,EAAE,KAAK;QAC9B,KAAK,EAAE,CAAC;KACT;CACF,CAAA;AAaD,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,eAAe,CAAC,QAAQ,CAAC,KAAsB,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxC,UAAU,EAAE,KAAK,CAAC,GAAG;QACrB,OAAO,EAAE,KAAK,CAAC,cAAc;QAC7B,gBAAgB,EAAE,KAAK,CAAC,uBAAuB;KAChD,CAAC,CAAC,CAAA;AACL,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AgentConfig } from "./types.js";
|
|
2
|
+
import type { ContextProvider } from "./stores.js";
|
|
3
|
+
export declare class FileContextProvider implements ContextProvider {
|
|
4
|
+
private config;
|
|
5
|
+
constructor(config: AgentConfig);
|
|
6
|
+
getSoul(): Promise<string>;
|
|
7
|
+
getProfile(): Promise<string>;
|
|
8
|
+
getPreferences(): Promise<string>;
|
|
9
|
+
getMemory(): Promise<string>;
|
|
10
|
+
getHeartbeat(): Promise<string>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=context-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-provider.d.ts","sourceRoot":"","sources":["../../src/agent/context-provider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAUlD,qBAAa,mBAAoB,YAAW,eAAe;IACzD,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,WAAW;IAIzB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAI1B,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAI7B,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAIjC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAK5B,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;CAItC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as fs from "node:fs/promises";
|
|
2
|
+
import { expandPath } from "./config.js";
|
|
3
|
+
async function readFileOrEmpty(filePath) {
|
|
4
|
+
try {
|
|
5
|
+
return await fs.readFile(filePath, "utf-8");
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return "";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class FileContextProvider {
|
|
12
|
+
config;
|
|
13
|
+
constructor(config) {
|
|
14
|
+
this.config = config;
|
|
15
|
+
}
|
|
16
|
+
async getSoul() {
|
|
17
|
+
return readFileOrEmpty(expandPath("~/.artemys/SOUL.md"));
|
|
18
|
+
}
|
|
19
|
+
async getProfile() {
|
|
20
|
+
return readFileOrEmpty(expandPath(this.config.profile_path ?? "~/.artemys/PROFILE.md"));
|
|
21
|
+
}
|
|
22
|
+
async getPreferences() {
|
|
23
|
+
return readFileOrEmpty(expandPath(this.config.preferences_path ?? "~/.artemys/PREFERENCES.md"));
|
|
24
|
+
}
|
|
25
|
+
async getMemory() {
|
|
26
|
+
const memoryDir = expandPath(this.config.memory_dir ?? "~/.artemys");
|
|
27
|
+
return readFileOrEmpty(`${memoryDir}/MEMORY.md`);
|
|
28
|
+
}
|
|
29
|
+
async getHeartbeat() {
|
|
30
|
+
const memoryDir = expandPath(this.config.memory_dir ?? "~/.artemys");
|
|
31
|
+
return readFileOrEmpty(`${memoryDir}/HEARTBEAT.md`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=context-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-provider.js","sourceRoot":"","sources":["../../src/agent/context-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,KAAK,UAAU,eAAe,CAAC,QAAgB;IAC7C,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,OAAO,mBAAmB;IACtB,MAAM,CAAa;IAE3B,YAAY,MAAmB;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,eAAe,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAA;IAC1D,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,uBAAuB,CAAC,CAAC,CAAA;IACzF,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,OAAO,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,2BAA2B,CAAC,CAAC,CAAA;IACjG,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,YAAY,CAAC,CAAA;QACpE,OAAO,eAAe,CAAC,GAAG,SAAS,YAAY,CAAC,CAAA;IAClD,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,YAAY,CAAC,CAAA;QACpE,OAAO,eAAe,CAAC,GAAG,SAAS,eAAe,CAAC,CAAA;IACrD,CAAC;CACF"}
|
package/dist/agent/context.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { AgentConfig } from "./types.js";
|
|
2
2
|
import type { ToolDefinition } from "./types.js";
|
|
3
|
+
import type { ContextProvider, SystemPromptBuilder } from "./stores.js";
|
|
3
4
|
export declare function loadProfile(profilePath?: string): Promise<string>;
|
|
4
5
|
export declare function loadPreferences(preferencesPath?: string): Promise<string>;
|
|
5
6
|
export declare function buildBootstrapContext(profilePath?: string, preferencesPath?: string): Promise<string>;
|
|
6
|
-
export declare
|
|
7
|
+
export declare const defaultSystemPromptBuilder: SystemPromptBuilder;
|
|
8
|
+
export declare function buildSystemPrompt(config: AgentConfig, tools: ToolDefinition[], contextProvider?: ContextProvider, promptBuilder?: SystemPromptBuilder): Promise<string>;
|
|
7
9
|
//# sourceMappingURL=context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/agent/context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/agent/context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAWvE,wBAAsB,WAAW,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEvE;AAED,wBAAsB,eAAe,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE/E;AAGD,wBAAsB,qBAAqB,CACzC,WAAW,CAAC,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED,eAAO,MAAM,0BAA0B,EAAE,mBA8CxC,CAAA;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,cAAc,EAAE,EACvB,eAAe,CAAC,EAAE,eAAe,EACjC,aAAa,CAAC,EAAE,mBAAmB,GAClC,OAAO,CAAC,MAAM,CAAC,CAajB"}
|
package/dist/agent/context.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as fs from "node:fs/promises";
|
|
2
2
|
import { expandPath } from "./config.js";
|
|
3
|
+
import { FileContextProvider } from "./context-provider.js";
|
|
3
4
|
async function readFileOrEmpty(filePath) {
|
|
4
5
|
try {
|
|
5
6
|
return await fs.readFile(filePath, "utf-8");
|
|
@@ -25,15 +26,9 @@ export async function buildBootstrapContext(profilePath, preferencesPath) {
|
|
|
25
26
|
sections.push(`## Your Human's Preferences\n${prefs.trim()}`);
|
|
26
27
|
return sections.join("\n\n");
|
|
27
28
|
}
|
|
28
|
-
export
|
|
29
|
-
const
|
|
30
|
-
const soul = await readFileOrEmpty(expandPath("~/.artemys/SOUL.md"));
|
|
31
|
-
const memory = await readFileOrEmpty(`${memoryDir}/MEMORY.md`);
|
|
32
|
-
const heartbeat = await readFileOrEmpty(`${memoryDir}/HEARTBEAT.md`);
|
|
33
|
-
const profile = await loadProfile(config.profile_path);
|
|
34
|
-
const preferences = await loadPreferences(config.preferences_path);
|
|
29
|
+
export const defaultSystemPromptBuilder = (context) => {
|
|
30
|
+
const { soul, profile, preferences, memory, heartbeat, tools, config } = context;
|
|
35
31
|
const sections = [];
|
|
36
|
-
// Soul (identity) — if missing, use a sensible default
|
|
37
32
|
if (soul.trim()) {
|
|
38
33
|
sections.push(soul.trim());
|
|
39
34
|
}
|
|
@@ -51,30 +46,35 @@ You represent your human in all professional career matters.
|
|
|
51
46
|
- You communicate with warmth but professionalism — you're their agent, not an assistant
|
|
52
47
|
- When uncertain about sharing information, err on the side of protecting your human`);
|
|
53
48
|
}
|
|
54
|
-
// Profile
|
|
55
49
|
if (profile.trim()) {
|
|
56
50
|
sections.push(`## Your Human's Profile\n${profile.trim()}`);
|
|
57
51
|
}
|
|
58
|
-
// Preferences
|
|
59
52
|
if (preferences.trim()) {
|
|
60
53
|
sections.push(`## Your Human's Preferences\n${preferences.trim()}`);
|
|
61
54
|
}
|
|
62
|
-
// Memory (learned facts)
|
|
63
55
|
if (memory.trim()) {
|
|
64
56
|
sections.push(`## Memory\n${memory.trim()}`);
|
|
65
57
|
}
|
|
66
|
-
// Heartbeat (scheduled actions)
|
|
67
58
|
if (heartbeat.trim()) {
|
|
68
59
|
sections.push(`## Scheduled Actions\n${heartbeat.trim()}`);
|
|
69
60
|
}
|
|
70
|
-
// Available tools
|
|
71
61
|
const toolNames = tools.map(t => `- ${t.name}: ${t.description}`).join("\n");
|
|
72
62
|
sections.push(`## Available Tools\nYou have access to the following tools. Use them proactively when appropriate:\n${toolNames}`);
|
|
73
|
-
// Decision gates
|
|
74
63
|
sections.push(`## Decision Gates
|
|
75
64
|
Some actions require your human's approval. When a tool has a "confirm" policy, you'll see a decision prompt sent to your human. Wait for their response before proceeding.`);
|
|
76
|
-
// Metadata
|
|
77
65
|
sections.push(`## Runtime Info\n- Date: ${new Date().toISOString().split("T")[0]}\n- Model: ${config.model}`);
|
|
78
66
|
return sections.join("\n\n");
|
|
67
|
+
};
|
|
68
|
+
export async function buildSystemPrompt(config, tools, contextProvider, promptBuilder) {
|
|
69
|
+
const provider = contextProvider ?? new FileContextProvider(config);
|
|
70
|
+
const builder = promptBuilder ?? defaultSystemPromptBuilder;
|
|
71
|
+
const [soul, profile, preferences, memory, heartbeat] = await Promise.all([
|
|
72
|
+
provider.getSoul(),
|
|
73
|
+
provider.getProfile(),
|
|
74
|
+
provider.getPreferences(),
|
|
75
|
+
provider.getMemory(),
|
|
76
|
+
provider.getHeartbeat(),
|
|
77
|
+
]);
|
|
78
|
+
return builder({ soul, profile, preferences, memory, heartbeat, tools, config });
|
|
79
79
|
}
|
|
80
80
|
//# sourceMappingURL=context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/agent/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,KAAK,UAAU,eAAe,CAAC,QAAgB;IAC7C,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAoB;IACpD,OAAO,eAAe,CAAC,UAAU,CAAC,WAAW,IAAI,uBAAuB,CAAC,CAAC,CAAA;AAC5E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,eAAwB;IAC5D,OAAO,eAAe,CAAC,UAAU,CAAC,eAAe,IAAI,2BAA2B,CAAC,CAAC,CAAA;AACpF,CAAC;AAED,uBAAuB;AACvB,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,WAAoB,EACpB,eAAwB;IAExB,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAA;IAC9C,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,eAAe,CAAC,CAAA;IACpD,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,IAAI,OAAO,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,4BAA4B,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC/E,IAAI,KAAK,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,gCAAgC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC/E,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAC9B,CAAC;AAED,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/agent/context.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/index.d.ts
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
export type { ToolDefinition, ToolResult, ToolContext, ChannelAdapter, MessageHandler, MessageAction, Session, SessionMessage, ToolCall, ToolCallResult, AgentConfig, ScheduledTask, ScheduleType, TaskStatus, ArchiveMeta, } from "./types.js";
|
|
2
2
|
export { OpportunityStateSchema, type OpportunityState } from "./types.js";
|
|
3
|
+
export type { SessionStore, TaskStore, ContextProvider, SystemPromptBuilder, ToolExecutionHook, } from "./stores.js";
|
|
3
4
|
export { AgentConfigSchema, loadConfig, expandPath } from "./config.js";
|
|
4
5
|
export { type ArtemysEvent,
|
|
5
6
|
/** @deprecated Use ArtemysEvent */
|
|
6
7
|
type ArtieEvent, type EventPayloadMap, ArtemysEventEmitter,
|
|
7
8
|
/** @deprecated Use ArtemysEventEmitter */
|
|
8
9
|
ArtieEventEmitter, createEventEmitter, } from "./events.js";
|
|
9
|
-
export { SessionManager } from "./session.js";
|
|
10
|
-
export { loadProfile, loadPreferences, buildBootstrapContext, buildSystemPrompt } from "./context.js";
|
|
10
|
+
export { FileSessionStore, SessionManager } from "./session.js";
|
|
11
|
+
export { loadProfile, loadPreferences, buildBootstrapContext, buildSystemPrompt, defaultSystemPromptBuilder } from "./context.js";
|
|
12
|
+
export { FileContextProvider } from "./context-provider.js";
|
|
11
13
|
export { ToolRegistry } from "./tools/index.js";
|
|
12
|
-
export { ArtemysRuntime, /** @deprecated Use ArtemysRuntime */ ArtieRuntime } from "./runtime.js";
|
|
14
|
+
export { ArtemysRuntime, /** @deprecated Use ArtemysRuntime */ ArtieRuntime, type RuntimeOptions, type StreamEvent } from "./runtime.js";
|
|
13
15
|
export { createCareerAdviceTool } from "./tools/career-advice.js";
|
|
14
16
|
export { createResumeTool } from "./tools/resume.js";
|
|
15
17
|
export { createMarketDataTool } from "./tools/market-data.js";
|
|
@@ -22,8 +24,9 @@ export { createScheduleTaskTool } from "./tools/schedule-task.js";
|
|
|
22
24
|
export { createListTasksTool } from "./tools/list-tasks.js";
|
|
23
25
|
export { createCancelTaskTool } from "./tools/cancel-task.js";
|
|
24
26
|
export { SessionArchiver } from "./archiver.js";
|
|
25
|
-
export { TaskScheduler } from "./scheduler.js";
|
|
27
|
+
export { TaskScheduler, FileTaskStore } from "./scheduler.js";
|
|
26
28
|
export { createRegistry } from "./providers.js";
|
|
27
29
|
export { loadMcpTools, parseMcpServersFromEnv, type McpServerConfig } from "./mcp.js";
|
|
28
30
|
export { detectATS, getSelectors, getActionPlan, type ATSType, type ATSSelectors, type ATSFieldKey, type ATSActionPlan, } from "./tools/browser/ats-patterns.js";
|
|
31
|
+
export { CAPABILITY_KEYS, CAPABILITY_CATALOG, isCapabilityKey, defaultCapabilityStates, type CapabilityKey, type CapabilityCatalogEntry, type CapabilityGrantState, type CapabilityGrantStore, } from "./capabilities.js";
|
|
29
32
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,UAAU,EACV,WAAW,EACX,cAAc,EACd,cAAc,EACd,aAAa,EACb,OAAO,EACP,cAAc,EACd,QAAQ,EACR,cAAc,EACd,WAAW,EACX,aAAa,EACb,YAAY,EACZ,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAE1E,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAEvE,OAAO,EACL,KAAK,YAAY;AACjB,mCAAmC;AACnC,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,mBAAmB;AACnB,0CAA0C;AAC1C,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,UAAU,EACV,WAAW,EACX,cAAc,EACd,cAAc,EACd,aAAa,EACb,OAAO,EACP,cAAc,EACd,QAAQ,EACR,cAAc,EACd,WAAW,EACX,aAAa,EACb,YAAY,EACZ,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAE1E,YAAY,EACV,YAAY,EACZ,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAEvE,OAAO,EACL,KAAK,YAAY;AACjB,mCAAmC;AACnC,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,mBAAmB;AACnB,0CAA0C;AAC1C,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE/D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAA;AAEjI,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAE/C,OAAO,EAAE,cAAc,EAAE,qCAAqC,CAAC,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAExI,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,GACvB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,KAAK,eAAe,EAAE,MAAM,UAAU,CAAA;AAErF,OAAO,EACL,SAAS,EACT,YAAY,EACZ,aAAa,EACb,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAA"}
|
package/dist/agent/index.js
CHANGED
|
@@ -3,8 +3,9 @@ export { AgentConfigSchema, loadConfig, expandPath } from "./config.js";
|
|
|
3
3
|
export { ArtemysEventEmitter,
|
|
4
4
|
/** @deprecated Use ArtemysEventEmitter */
|
|
5
5
|
ArtieEventEmitter, createEventEmitter, } from "./events.js";
|
|
6
|
-
export { SessionManager } from "./session.js";
|
|
7
|
-
export { loadProfile, loadPreferences, buildBootstrapContext, buildSystemPrompt } from "./context.js";
|
|
6
|
+
export { FileSessionStore, SessionManager } from "./session.js";
|
|
7
|
+
export { loadProfile, loadPreferences, buildBootstrapContext, buildSystemPrompt, defaultSystemPromptBuilder } from "./context.js";
|
|
8
|
+
export { FileContextProvider } from "./context-provider.js";
|
|
8
9
|
export { ToolRegistry } from "./tools/index.js";
|
|
9
10
|
export { ArtemysRuntime, /** @deprecated Use ArtemysRuntime */ ArtieRuntime } from "./runtime.js";
|
|
10
11
|
export { createCareerAdviceTool } from "./tools/career-advice.js";
|
|
@@ -19,8 +20,9 @@ export { createScheduleTaskTool } from "./tools/schedule-task.js";
|
|
|
19
20
|
export { createListTasksTool } from "./tools/list-tasks.js";
|
|
20
21
|
export { createCancelTaskTool } from "./tools/cancel-task.js";
|
|
21
22
|
export { SessionArchiver } from "./archiver.js";
|
|
22
|
-
export { TaskScheduler } from "./scheduler.js";
|
|
23
|
+
export { TaskScheduler, FileTaskStore } from "./scheduler.js";
|
|
23
24
|
export { createRegistry } from "./providers.js";
|
|
24
25
|
export { loadMcpTools, parseMcpServersFromEnv } from "./mcp.js";
|
|
25
26
|
export { detectATS, getSelectors, getActionPlan, } from "./tools/browser/ats-patterns.js";
|
|
27
|
+
export { CAPABILITY_KEYS, CAPABILITY_CATALOG, isCapabilityKey, defaultCapabilityStates, } from "./capabilities.js";
|
|
26
28
|
//# sourceMappingURL=index.js.map
|
package/dist/agent/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,YAAY,CAAA;AAU1E,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAEvE,OAAO,EAKL,mBAAmB;AACnB,0CAA0C;AAC1C,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE/D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAA;AAEjI,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAE/C,OAAO,EAAE,cAAc,EAAE,qCAAqC,CAAC,YAAY,EAAyC,MAAM,cAAc,CAAA;AAExI,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GAKrB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAwB,MAAM,UAAU,CAAA;AAErF,OAAO,EACL,SAAS,EACT,YAAY,EACZ,aAAa,GAKd,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,uBAAuB,GAKxB,MAAM,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type OpportunityDecision = "apply" | "pass" | "later";
|
|
2
|
+
export declare function parseOpportunityDecisionCommand(text: string): {
|
|
3
|
+
decision: OpportunityDecision;
|
|
4
|
+
opportunityId: string;
|
|
5
|
+
} | null;
|
|
6
|
+
export declare function buildOpportunityDecisionConfirmation(input: {
|
|
7
|
+
decision: OpportunityDecision;
|
|
8
|
+
opportunityId: string;
|
|
9
|
+
}): string;
|
|
10
|
+
//# sourceMappingURL=decision-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision-parser.d.ts","sourceRoot":"","sources":["../../../src/agent/notifications/decision-parser.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAA;AAK5D,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,MAAM,GAAG;IAC7D,QAAQ,EAAE,mBAAmB,CAAA;IAC7B,aAAa,EAAE,MAAM,CAAA;CACtB,GAAG,IAAI,CAWP;AAED,wBAAgB,oCAAoC,CAAC,KAAK,EAAE;IAC1D,QAAQ,EAAE,mBAAmB,CAAA;IAC7B,aAAa,EAAE,MAAM,CAAA;CACtB,GAAG,MAAM,CAUT"}
|