kira-wallet 0.1.0 → 0.1.3
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 +109 -90
- package/THIRD_PARTY_NOTICES.md +17 -0
- package/curve_pricing.py +6 -2
- package/docs/AGENT_TOOLS.md +36 -27
- package/docs/CLI.md +74 -17
- package/docs/KIRA_LIVE_QA.md +154 -0
- package/docs/ONBOARDING_CHAT_CONTRACT.md +33 -2
- package/docs/RELEASE.md +94 -25
- package/kira_agent.py +220 -21
- package/kira_cli.py +30 -12
- package/kira_config.py +9 -5
- package/kira_jobs.py +4 -2
- package/kira_ows.py +114 -0
- package/kira_research_tools.py +105 -0
- package/native_assets.py +56 -0
- package/onchain.cjs +28 -4
- package/ows_bridge.cjs +26 -0
- package/package.json +14 -5
- package/pipeline-onchain.cjs +6 -3
- package/viewer/README.md +22 -5
- package/viewer/details.py +8 -0
- package/viewer/model.py +65 -8
- package/viewer/onboarding.py +13 -0
- package/viewer/refresh_prices.py +41 -10
- package/viewer/server.py +35 -6
- package/viewer/static/agent.js +40 -14
- package/viewer/static/app.js +51 -20
- package/viewer/static/chat-workspace.css +120 -0
- package/viewer/static/chat-workspace.js +84 -0
- package/viewer/static/index.html +42 -26
- package/viewer/static/jobs.js +6 -5
- package/viewer/static/markdown.js +64 -0
- package/viewer/static/ows-logo.svg +24 -0
- package/viewer/static/ows.js +98 -0
- package/viewer/static/report.css +135 -0
- package/viewer/static/report.js +35 -0
- package/viewer/static/selects.js +44 -0
- package/viewer/static/watching.js +11 -0
- package/viewer/static/workspace.css +7 -0
- package/viewer/static/workspace.js +28 -37
- package/viewer/token_images.py +69 -7
- package/wallet.py +8 -2
package/README.md
CHANGED
|
@@ -1,116 +1,135 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/realproject7/kira-wallet/v0.1.2/viewer/static/kira-explain.png" width="140" alt="Kira, your wallet research partner">
|
|
3
|
+
</p>
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
5
|
+
<h1 align="center">Kira Wallet</h1>
|
|
6
|
+
<p align="center"><strong>Manage your wallets. With your own AI.</strong></p>
|
|
7
|
+
<p align="center">
|
|
8
|
+
<a href="https://kirawallet.app">Website</a> ·
|
|
9
|
+
<a href="https://github.com/realproject7/kira-wallet/releases">Releases</a> ·
|
|
10
|
+
<a href="docs/CLI.md">CLI guide</a>
|
|
11
|
+
</p>
|
|
6
12
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
13
|
+
Bring the AI you already use to your wallets. Add public wallet addresses, see
|
|
14
|
+
what you hold across supported EVM chains, and ask Kira to research your tokens
|
|
15
|
+
or refresh your holdings. Kira runs on your computer and uses your existing
|
|
16
|
+
Codex or Claude Code account.
|
|
11
17
|
|
|
12
|
-
|
|
18
|
+

|
|
13
19
|
|
|
14
|
-
|
|
15
|
-
|
|
20
|
+
## Get started
|
|
21
|
+
|
|
22
|
+
**Requires Node.js 22+ and Python 3.11+. macOS is verified.** The research and
|
|
23
|
+
background-process features require a POSIX environment.
|
|
24
|
+
|
|
25
|
+
Install Kira:
|
|
16
26
|
|
|
17
27
|
```sh
|
|
18
|
-
npm install
|
|
19
|
-
|
|
20
|
-
node bin/kira.cjs doctor
|
|
21
|
-
node bin/kira.cjs setup
|
|
28
|
+
npm install -g kira-wallet
|
|
29
|
+
kira setup
|
|
22
30
|
```
|
|
23
31
|
|
|
24
|
-
|
|
25
|
-
`~/.local/share/kira-wallet`, separate from the installed package. Use
|
|
26
|
-
`--data-dir /absolute/private/directory` before the command for another portfolio.
|
|
27
|
-
The existing workspace viewer can still run at port 8765.
|
|
32
|
+
Open the local app at [127.0.0.1:8787](http://127.0.0.1:8787).
|
|
28
33
|
|
|
29
|
-
|
|
34
|
+
After your first setup, open Kira with:
|
|
30
35
|
|
|
31
36
|
```sh
|
|
32
|
-
|
|
33
|
-
node bin/kira.cjs --data-dir /tmp/kira-sample stop
|
|
37
|
+
kira start
|
|
34
38
|
```
|
|
35
39
|
|
|
36
|
-
|
|
40
|
+
It starts your local app and opens the browser. Use `kira stop` to stop it.
|
|
41
|
+
For a viewer without wallet or research actions, use `kira start --read-only`.
|
|
42
|
+
|
|
43
|
+
Prefer an archive? [GitHub releases](https://github.com/realproject7/kira-wallet/releases/tag/v0.1.2)
|
|
44
|
+
include the same package and its checksum.
|
|
45
|
+
|
|
46
|
+
1. **Add a watching wallet.** Paste a public address and give it a name. Add more
|
|
47
|
+
wallets whenever you need them.
|
|
48
|
+
2. **Set up discovery.** In **Workspace settings**, connect an indexer for broad
|
|
49
|
+
ERC20 discovery. Public RPC alone has limited discovery; incomplete coverage
|
|
50
|
+
stays visible.
|
|
51
|
+
3. **Connect your AI.** Install and sign in to the
|
|
52
|
+
[Codex CLI](https://developers.openai.com/codex/cli) or
|
|
53
|
+
[Claude Code](https://code.claude.com/docs/en/quickstart), then choose your
|
|
54
|
+
account from **Connect a model** in Kira Chat. Select one wallet or your whole
|
|
55
|
+
portfolio, test the connection, and choose whether to allow research tools.
|
|
56
|
+
4. **Ask Kira.** Start with a question, or ask it to refresh a wallet's holdings
|
|
57
|
+
or prices. Follow the job in **Activity** while it runs.
|
|
58
|
+
|
|
59
|
+
Want to look around first? Try the demo:
|
|
37
60
|
|
|
38
61
|
```sh
|
|
39
|
-
kira
|
|
40
|
-
kira refresh '<registered address or tag>'
|
|
41
|
-
kira prices '<registered address or tag>'
|
|
62
|
+
kira --data-dir /tmp/kira-demo demo --port 8790
|
|
42
63
|
```
|
|
43
64
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
65
|
+
Open [127.0.0.1:8790](http://127.0.0.1:8790). Stop it with
|
|
66
|
+
`kira --data-dir /tmp/kira-demo stop`.
|
|
67
|
+
|
|
68
|
+
## What can I ask?
|
|
69
|
+
|
|
70
|
+
- “Which chains do I have ETH worth $10 or more on?”
|
|
71
|
+
- “Find tokens I may have overlooked. Show their quantity, recorded price,
|
|
72
|
+
market venues and any available full-balance exit quote.”
|
|
73
|
+
- “Review my Blast holdings across all my wallets. What is known, and where
|
|
74
|
+
is coverage missing?”
|
|
75
|
+
- “Compare my saved analyses. What changed?”
|
|
76
|
+
- “Refresh prices for my daily wallet, then tell me what the job actually found.”
|
|
77
|
+
|
|
78
|
+
Kira can read approved records, compare saved analyses, and start holdings or
|
|
79
|
+
price research when you enable its wallet tools. It distinguishes recorded spot
|
|
80
|
+
value from an execution quote. Missing prices and holdings stay unknown;
|
|
81
|
+
transfer inactivity needs transfer-history evidence. Testnets and pool liquidity
|
|
82
|
+
are excluded from your portfolio's USD value.
|
|
48
83
|
|
|
49
|
-
|
|
50
|
-
tokens when configured, pins chain reads to blocks, enumerates reachable bond
|
|
51
|
-
registries, queries ERC20 and registered ERC1155 token ID 0 balances, records
|
|
52
|
-
curve reserves and burn quotes, and verifies supported DEX pool contracts.
|
|
53
|
-
Shared caches contain asset identities, never another wallet's balances.
|
|
54
|
-
Registry publication is atomic and analysis writers are serialized.
|
|
84
|
+

|
|
55
85
|
|
|
56
|
-
|
|
57
|
-
General ERC20 discovery requires an indexed provider and successful responses.
|
|
58
|
-
Testnets, pool TVL and shared curve backing are excluded from wallet USD totals.
|
|
59
|
-
Spot value is distinct from an executable redemption estimate.
|
|
86
|
+
*Markets, paired token logos and each wallet's balance in one view.*
|
|
60
87
|
|
|
61
|
-
|
|
62
|
-
[viewer behavior](viewer/README.md). Development reports, design concepts and
|
|
63
|
-
generation records remain in the source checkout under `docs/` and `prototype/`.
|
|
88
|
+
## Your wallets, your controls
|
|
64
89
|
|
|
65
|
-
|
|
90
|
+
- **Watch an existing wallet** using its public address. Watching does not grant
|
|
91
|
+
Kira permission to spend.
|
|
92
|
+
- **Create an OWS wallet** with **Create wallet** in the sidebar, powered by
|
|
93
|
+
[Open Wallet Standard](https://openwallet.sh/).
|
|
94
|
+
Enter the encryption passphrase in the local form. Kira connects the public
|
|
95
|
+
EVM account; keys stay in the local OWS vault.
|
|
96
|
+
- **Choose what AI can see.** Wallet access can be off, limited to one wallet,
|
|
97
|
+
or cover your portfolio. Approved context is sent through your selected
|
|
98
|
+
native CLI and model account. Their data policies still apply.
|
|
99
|
+
- **Keep records locally.** No Kira account or hosted portfolio database is
|
|
100
|
+
required. Chat drafts stay in memory; saving Kira chat history is opt-in.
|
|
101
|
+
|
|
102
|
+
Chat currently handles research and wallet records. Signing, transfers and trade
|
|
103
|
+
execution are not implemented. [Wallet onboarding details](docs/CLI.md#browser-and-local-ows-wallets).
|
|
104
|
+
|
|
105
|
+
## Useful commands
|
|
106
|
+
|
|
107
|
+
```sh
|
|
108
|
+
kira add <public-address> --tag 'Daily wallet'
|
|
109
|
+
kira refresh 'Daily wallet'
|
|
110
|
+
kira prices 'Daily wallet'
|
|
111
|
+
kira status
|
|
112
|
+
kira stop
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Data defaults to `~/.local/share/kira-wallet`, separate from the installed
|
|
116
|
+
package. Use `--data-dir /absolute/private/directory` before a command to choose
|
|
117
|
+
another workspace. For connection, model or provider help, see the
|
|
118
|
+
[CLI guide](docs/CLI.md) and [viewer guide](viewer/README.md).
|
|
119
|
+
|
|
120
|
+
## Build and contribute
|
|
66
121
|
|
|
67
122
|
```sh
|
|
123
|
+
npm install --ignore-scripts
|
|
124
|
+
node bin/kira.cjs setup
|
|
68
125
|
npm test
|
|
69
|
-
|
|
70
|
-
node --check onchain.cjs
|
|
126
|
+
python3 scripts/check-public.py
|
|
71
127
|
```
|
|
72
128
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
read-only. CLI and browser use the same typed job service for research, exact
|
|
81
|
-
wallet names and connection references. Jobs preserve prior results, retain
|
|
82
|
-
partial evidence and require explicit interruption recovery. Price jobs keep
|
|
83
|
-
immutable overlays. Saved analyses can be compared with exact decimal balance
|
|
84
|
-
changes and missing records remain unknown.
|
|
85
|
-
|
|
86
|
-
`kira tools` is a read-only local MCP adapter, with no automatic account or
|
|
87
|
-
model connection. See [CLI usage](docs/CLI.md), [job contract](docs/JOB_CONTRACT.md),
|
|
88
|
-
[tool setup gate](docs/AGENT_TOOLS.md) and [continuation evidence](docs/KIRA_JOBS_BUILD_REPORT.md).
|
|
89
|
-
|
|
90
|
-
## Kira research workspace
|
|
91
|
-
|
|
92
|
-
The workspace places Kira's local briefing and connected conversation
|
|
93
|
-
beside the evidence. The brand link returns Home. Overview, All tokens
|
|
94
|
-
and Activity have distinct tabs; wallet controls stay together. On small
|
|
95
|
-
screens, switch directly between Portfolio and Kira.
|
|
96
|
-
|
|
97
|
-
All tokens uses existing recorded aggregates with chain-plus-contract identity,
|
|
98
|
-
search, network and pricing filters, and 50 rows per page. It does not query
|
|
99
|
-
providers. Activity separates active work from persisted job history and shows
|
|
100
|
-
state, elapsed time, last progress and recovery controls. Missing progress does
|
|
101
|
-
not silently turn a running job into a completed or failed job.
|
|
102
|
-
|
|
103
|
-
Run `kira setup` to connect your installed Codex or Claude Code CLI account.
|
|
104
|
-
Choose no wallet context, one registered wallet or the whole portfolio. A real
|
|
105
|
-
response check verifies the selected model before permissions are saved. Drafts
|
|
106
|
-
stay in memory. Kira-local conversation retention is opt-in; provider and native
|
|
107
|
-
CLI policies remain separate. Context or model changes start a fresh conversation.
|
|
108
|
-
Chat does not sign, trade or automatically start research. See the
|
|
109
|
-
[onboarding and conversation contract](docs/ONBOARDING_CHAT_CONTRACT.md), the
|
|
110
|
-
[redesign report](docs/KIRA_REDESIGN_REPORT.md) and
|
|
111
|
-
[agreed wallet capability direction](docs/WALLET_CAPABILITIES.md).
|
|
112
|
-
|
|
113
|
-
For a contribution, use synthetic data and run `python3 scripts/check-public.py`
|
|
114
|
-
before a push. Never attach a personal portfolio screenshot, registry, snapshot,
|
|
115
|
-
job, credential, local path or log to an issue or PR. Repository history uses a
|
|
116
|
-
public noreply identity. The `kira-workspace-v1` tag preserves the prior UI.
|
|
129
|
+
From source, use `node bin/kira.cjs` in place of `kira`.
|
|
130
|
+
[Local AI tool setup](docs/AGENT_TOOLS.md) ·
|
|
131
|
+
[Release preparation](docs/RELEASE.md).
|
|
132
|
+
|
|
133
|
+
Original code and Kira character assets are available under the [MIT license](LICENSE).
|
|
134
|
+
Third-party artwork and references retain their own terms; see
|
|
135
|
+
[Third-party notices](THIRD_PARTY_NOTICES.md).
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -11,3 +11,20 @@ license does not relicense them.
|
|
|
11
11
|
[Mint Club](https://github.com/Steemhunt/mint.club-v2-contract).
|
|
12
12
|
- Installed dependencies retain their package licenses. Remote token and chain
|
|
13
13
|
artwork is referenced from its provider; the app does not claim ownership.
|
|
14
|
+
- Native coin prices and artwork reference [CoinGecko market metadata](https://docs.coingecko.com/reference/coins-markets).
|
|
15
|
+
Provider availability and rate limits apply. Artwork belongs to the respective projects.
|
|
16
|
+
|
|
17
|
+
Open Wallet Standard Node SDK (`@open-wallet-standard/core` 1.4.3) and its
|
|
18
|
+
optional platform bindings are distributed under MIT by their upstream owner.
|
|
19
|
+
The SDK is an optional dependency used for human-submitted encrypted wallet
|
|
20
|
+
creation and public account listing. See
|
|
21
|
+
[Open Wallet Standard](https://github.com/open-wallet-standard/core).
|
|
22
|
+
|
|
23
|
+
The official Open Wallet Standard wordmark in `viewer/static/ows-logo.svg` and
|
|
24
|
+
`site/assets/ows-logo.svg` is copied unchanged from
|
|
25
|
+
[openwallet.sh](https://openwallet.sh/footer-logo.svg). CSS displays its original
|
|
26
|
+
white artwork in black on light backgrounds. The mark belongs to its owner and
|
|
27
|
+
identifies the OWS wallet-creation integration without implying endorsement.
|
|
28
|
+
Its retrieval date and source digest are in `site/assets/ows-artwork-source.json`.
|
|
29
|
+
|
|
30
|
+
CASHCAT, BLAST and USDB artwork in the public reconstructed demo comes from lpTOKEN.fun token metadata, DEX Screener and CoinGecko. Token marks belong to their respective owners and identify the assets without implying affiliation or endorsement. The source URLs and chain-specific contract identities are recorded in `site/assets/token-artwork-sources.json`.
|
package/curve_pricing.py
CHANGED
|
@@ -17,11 +17,15 @@ def resolve(graph, prices):
|
|
|
17
17
|
if key in seen:return None
|
|
18
18
|
existing=known.get(key)
|
|
19
19
|
node=nodes.get(key)
|
|
20
|
-
|
|
20
|
+
unfunded=node and not node.get('error') and node.get('is_curve') and node.get('funded') is False
|
|
21
|
+
if existing and existing.get('usd') is not None and existing.get('quality') not in ('unfunded','unreliable') and (existing.get('basis')!='Curve spot' or not unfunded):
|
|
21
22
|
cache[key]=existing;return existing
|
|
22
23
|
if not node or node.get('error') or not node.get('is_curve'):return None
|
|
23
24
|
if not node['funded']:
|
|
24
|
-
|
|
25
|
+
record={'chain_id':key[0],'address':node['address'],'usd':None,'basis':'Curve spot','quality':'unfunded',
|
|
26
|
+
'curve_reserve':node.get('curve_reserve'),'source':node.get('source'),
|
|
27
|
+
'observed_at':node.get('observed_at'),'block_number':node.get('block_number')}
|
|
28
|
+
cache[key]=record;return record
|
|
25
29
|
parent=visit((key[0],node['reserve_token'].lower()),seen|{key})
|
|
26
30
|
if not parent or parent.get('usd') is None:return None
|
|
27
31
|
usd=float(node['price_in_reserve'])*parent['usd']
|
package/docs/AGENT_TOOLS.md
CHANGED
|
@@ -24,30 +24,39 @@ args = ["--data-dir", "<private-portfolio>", "tools"]
|
|
|
24
24
|
Replace the placeholder locally. Do not commit portfolio paths or credentials.
|
|
25
25
|
Kira does not edit the operator's Codex configuration automatically.
|
|
26
26
|
|
|
27
|
-
##
|
|
28
|
-
|
|
29
|
-
The
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
27
|
+
## Connected Kira chat
|
|
28
|
+
|
|
29
|
+
The in-app conversation uses a supported installed Codex or Claude CLI account.
|
|
30
|
+
A generic response check is required before saving a selected provider, model,
|
|
31
|
+
wallet scope and research permission. It sends no wallet facts. Authentication
|
|
32
|
+
stays with the installed CLI. No desktop tokens or authentication files are copied.
|
|
33
|
+
|
|
34
|
+
With research enabled, a bounded host-mediated loop provides portfolio_read,
|
|
35
|
+
wallet_read, token_read, snapshots_list, snapshot_read, snapshots_compare,
|
|
36
|
+
job_list, job_read, holdings_refresh and prices_refresh. Every operation is
|
|
37
|
+
scoped to registered wallets allowed by the conversation. Historical reads use
|
|
38
|
+
normalized financial projections. Unknown values and historical quote times
|
|
39
|
+
remain explicit. Native shell, file, browser and MCP execution stay disabled.
|
|
40
|
+
|
|
41
|
+
Chain evidence includes explicit native balances, including observed zero,
|
|
42
|
+
their observation times and blocks, and registry scan blocks. Empty positive
|
|
43
|
+
holding inventories do not remove these observations. Saved-analysis reads
|
|
44
|
+
also retain snapshot price-reference values and times without provider URLs
|
|
45
|
+
or debug fields. A comparison flag can reflect observation or reference changes
|
|
46
|
+
without proving a balance change or a different set of checked networks.
|
|
47
|
+
Research job reads include the approved wallet identity directly.
|
|
48
|
+
|
|
49
|
+
Refresh tools admit typed durable engine jobs. Current scope and cancellation
|
|
50
|
+
are checked immediately before admission. Queued work is visible in Activity;
|
|
51
|
+
chat cancellation does not cancel engine work already accepted. Duplicate
|
|
52
|
+
refresh requests within one turn reuse the same job. At most eight tool calls,
|
|
53
|
+
420 seconds and bounded context are permitted per turn. Existing configurations
|
|
54
|
+
keep their research permission off until explicitly enabled.
|
|
55
|
+
|
|
56
|
+
OWS create/list and browser wallet connection are human interfaces, not model
|
|
57
|
+
tools. The agent never receives passphrases, mnemonics, private keys or provider
|
|
58
|
+
credentials. Messages and approved wallet facts reach the selected model service
|
|
59
|
+
through the user's CLI; local storage does not imply an offline model.
|
|
60
|
+
|
|
61
|
+
See [the conversation contract](ONBOARDING_CHAT_CONTRACT.md).
|
|
62
|
+
The standalone stdio MCP adapter above remains read-only and separate.
|
package/docs/CLI.md
CHANGED
|
@@ -1,21 +1,57 @@
|
|
|
1
1
|
# CLI and provider configuration
|
|
2
2
|
|
|
3
|
-
The
|
|
3
|
+
The package carries the Python engine, browser assets and declared viem
|
|
4
4
|
dependency. It needs no Python packages and no sibling project. The package
|
|
5
5
|
file list excludes wallets, snapshots, conversations, caches, logs and private settings.
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
Install Kira from npm, then run `kira setup`:
|
|
7
|
+
|
|
8
|
+
```sh
|
|
9
|
+
npm install -g kira-wallet
|
|
10
|
+
kira setup
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
The npm registry currently offers version 0.1.2. The same archive and checksum
|
|
14
|
+
are available from the [GitHub release](https://github.com/realproject7/kira-wallet/releases/tag/v0.1.2).
|
|
15
|
+
Registry publication remains an operator action. The code and original character assets use the MIT license.
|
|
8
16
|
|
|
9
17
|
## Lifecycle
|
|
10
18
|
|
|
11
|
-
`kira
|
|
12
|
-
|
|
13
|
-
|
|
19
|
+
Use `kira setup` for your first setup. For everyday use, `kira start` starts
|
|
20
|
+
the local app with browser controls and opens it in your browser. The default
|
|
21
|
+
port is 8787. Use `--port` to choose another port, or `--no-open` to print the
|
|
22
|
+
URL without opening a browser. `kira status` identifies the managed instance.
|
|
23
|
+
`kira stop` checks its live instance ID and OS process identity before stopping it.
|
|
24
|
+
|
|
25
|
+
`kira init` prepares an empty private data directory. `kira start --read-only`
|
|
26
|
+
starts a loopback-only viewer without wallet or research actions.
|
|
14
27
|
Another portfolio never silently reuses that server.
|
|
15
28
|
|
|
16
29
|
`kira setup` starts the loopback viewer with local controls and opens its setup
|
|
17
30
|
screen. Use `--no-open` to print its URL instead. If a read-only viewer is already
|
|
18
|
-
running, stop it explicitly before setup
|
|
31
|
+
running, stop it explicitly before setup or a normal start. Changing between
|
|
32
|
+
read-only and control modes requires an explicit stop and restart. Starting
|
|
33
|
+
an already-running app in the same mode reuses its URL. The old `--controls`
|
|
34
|
+
option remains accepted for existing scripts but is no longer needed.
|
|
35
|
+
|
|
36
|
+
These startup defaults apply from 0.1.3. In the published 0.1.2 package, use
|
|
37
|
+
`kira setup` or `kira start --controls` for the full app.
|
|
38
|
+
|
|
39
|
+
The 0.1.2 GitHub release starts with a wallet checklist. Add a public EVM
|
|
40
|
+
address or use the browser wallet picker. Registration starts one explicit
|
|
41
|
+
research job; follow it in Activity and read the saved portfolio report.
|
|
42
|
+
No signature, seed phrase or private key is needed.
|
|
43
|
+
|
|
44
|
+
Public RPC checks known assets and Mint Club. For broader ERC20 discovery,
|
|
45
|
+
open Research connections, select Alchemy and name the private environment
|
|
46
|
+
variable holding its key. Never paste the key into the browser. `kira doctor`
|
|
47
|
+
checks whether the configured key is available. Configuration alone does not
|
|
48
|
+
prove complete coverage; inspect the recorded results and gaps.
|
|
49
|
+
|
|
50
|
+
Connecting Codex or Claude is optional. Use Connect your AI when ready, verify
|
|
51
|
+
a generic response and explicitly choose context permissions. Assistant answers
|
|
52
|
+
render a safe Markdown subset; raw HTML, images and links remain inert text.
|
|
53
|
+
Install the 0.1.1 GitHub archive for this wallet-first setup. The npm registry's
|
|
54
|
+
0.1.0 package continues to use the earlier account-first setup.
|
|
19
55
|
|
|
20
56
|
## Your model account
|
|
21
57
|
|
|
@@ -41,7 +77,7 @@ Kira-local history is opt-in and uses private `conversations/` files. With histo
|
|
|
41
77
|
off, conversations and drafts stay in memory. A new server process starts a fresh
|
|
42
78
|
conversation; saved files remain available locally and are not automatically
|
|
43
79
|
replayed. Native CLI, administrator policy and provider data policies remain a
|
|
44
|
-
separate trust boundary.
|
|
80
|
+
separate trust boundary. With wallet research enabled, Kira can read saved analyses, compare history and queue holdings or price updates. Jobs appear in Activity and continue independently of chat. Signing and trading stay outside the agent.
|
|
45
81
|
See [the conversation contract](ONBOARDING_CHAT_CONTRACT.md).
|
|
46
82
|
|
|
47
83
|
Global `--data-dir` precedes the command. `KIRA_DATA_DIR` provides the same
|
|
@@ -80,10 +116,7 @@ kira discovery alchemy --key-env ALCHEMY_API_KEY --explorers
|
|
|
80
116
|
kira config show
|
|
81
117
|
```
|
|
82
118
|
|
|
83
|
-
|
|
84
|
-
explicitly enable it. That preference applies to all custom-mode chains.
|
|
85
|
-
Chains without a configured endpoint remain unavailable while fallback is
|
|
86
|
-
disabled. Plain HTTP is accepted only for loopback endpoints.
|
|
119
|
+
Public fallback is automatic for new configurations. A missing or failing custom endpoint uses verified public endpoints, including failures after the initial connection. Reads keep the selected block. `--custom-only` explicitly disables fallback; an existing opt-out is preserved. `--public-fallback` restores it. Plain HTTP is accepted only for loopback endpoints. Public RPC does not provide complete ERC20 discovery.
|
|
87
120
|
|
|
88
121
|
Discovery is independent. Without an indexer, native and reachable Mint Club
|
|
89
122
|
reads still run and general discovery stays incomplete. Configuring an RPC
|
|
@@ -129,9 +162,9 @@ cancelled jobs retain their last good result and unpublished evidence.
|
|
|
129
162
|
interrupted jobs. Price jobs retain immutable overlays before updating the
|
|
130
163
|
viewer projection. A viewer stop does not cancel research jobs.
|
|
131
164
|
|
|
132
|
-
Start with `kira start
|
|
133
|
-
|
|
134
|
-
|
|
165
|
+
Start with `kira start` to use protected browser actions. Use `--read-only`
|
|
166
|
+
for a viewer without those actions. Stop an existing instance before switching
|
|
167
|
+
modes. Actions need the local session and same origin.
|
|
135
168
|
The supported URL uses 127.0.0.1. Browser controls offer wallet registration,
|
|
136
169
|
exact names, holdings/price refresh, cancel/resume, saved analysis comparison,
|
|
137
170
|
RPC references and discovery references. The synthetic demo cannot start
|
|
@@ -140,5 +173,29 @@ secrets and URLs remain outside the browser.
|
|
|
140
173
|
|
|
141
174
|
Use `kira --data-dir <private-portfolio> tools` for the read-only stdio adapter.
|
|
142
175
|
See [the tool guide](AGENT_TOOLS.md) and [job contract](JOB_CONTRACT.md).
|
|
143
|
-
Connected chat
|
|
144
|
-
|
|
176
|
+
Connected chat uses the native CLI account and approved context from setup.
|
|
177
|
+
The published package and original Kira assets are MIT licensed.
|
|
178
|
+
|
|
179
|
+
## Browser and local OWS wallets
|
|
180
|
+
|
|
181
|
+
Use **Connect wallet** to choose an EIP-6963 browser wallet such as MetaMask.
|
|
182
|
+
The app shows the provider and public accounts, lets you review the account
|
|
183
|
+
before registering it, and provides **Disconnect from Kira**. Disconnecting does
|
|
184
|
+
not remove recorded wallets or revoke extension permissions. Without a browser
|
|
185
|
+
wallet, the chooser explains how to open this same local URL in a compatible
|
|
186
|
+
browser. A phone cannot reach another computer's loopback URL.
|
|
187
|
+
|
|
188
|
+
**Local OWS wallet** lists public EVM descriptors from Open Wallet Standard.
|
|
189
|
+
The optional pinned SDK is `@open-wallet-standard/core` 1.4.3. The vault defaults
|
|
190
|
+
to `~/.ows`; `KIRA_OWS_VAULT` selects another local vault. Creating a new wallet
|
|
191
|
+
requires a human-entered encryption passphrase and uses OWS's encrypted local
|
|
192
|
+
storage. Kira never returns the mnemonic or private key. Back up and recover
|
|
193
|
+
with OWS owner tools. Existing keys and tags are preserved.
|
|
194
|
+
|
|
195
|
+
A private owner receipt serializes creation across apps using the same vault.
|
|
196
|
+
Retrying an interrupted creation recovers its request identity instead of
|
|
197
|
+
creating a second wallet. The browser keeps only the public request identity
|
|
198
|
+
in session storage. It clears password fields immediately. Recovery keeps the
|
|
199
|
+
original encryption passphrase. No signing, key export or account deletion
|
|
200
|
+
endpoint is exposed. OWS absence does not block ordinary address or browser
|
|
201
|
+
wallet onboarding.
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Local live acceptance, 2026-10-05
|
|
2
|
+
|
|
3
|
+
The operator requested thorough local product testing while npm publication
|
|
4
|
+
remained unavailable. Testing used a separate empty workspace, the supplied
|
|
5
|
+
public watching address, a separate disposable encrypted OWS vault, configured
|
|
6
|
+
research providers and the installed native Claude CLI. Existing operator
|
|
7
|
+
workspaces and their conversations were preserved.
|
|
8
|
+
|
|
9
|
+
## Real agent questions
|
|
10
|
+
|
|
11
|
+
Ten questions completed with real native model calls. One additional real turn
|
|
12
|
+
was deliberately stopped through the UI. The connection test is separate from
|
|
13
|
+
this count. No fixture response was substituted for a live answer.
|
|
14
|
+
|
|
15
|
+
| Case | Request | Observed result |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| 1 | Research progress while the first wallet is still being scanned | Distinguished pending work from saved results and unknown balances. |
|
|
18
|
+
| 2 | Newly created wallet state and available actions | Found an incorrect duplicate-name explanation for an unregistered queued wallet. Fixed the lookup error. |
|
|
19
|
+
| 3 | Recheck wallet identity and native ETH by chain | Corrected the duplicate-name claim. Kept native ETH separate from ERC20 assets and testnets. |
|
|
20
|
+
| 4 | Dormant tokens, market prices, pools and possible sale proceeds | Returned dated balances, prices and recorded burn outputs. Did not invent inactivity or executable DEX quotes. |
|
|
21
|
+
| 5 | Blast mainnet versus Blast Sepolia | Kept networks and wallets separate. Did not infer ownership of popular tokens missing from the record. |
|
|
22
|
+
| 6 | LP ownership versus market links | Identified distinct unpriced token contracts without inventing LP redemption. Exposed an incorrect retraction caused by omitted market details. |
|
|
23
|
+
| 7 | Read specific token market details again | Verified recorded, displayed and omitted pool counts. Corrected the summary/detail misunderstanding after the projection fix. |
|
|
24
|
+
| 8 | Queue exactly one holdings refresh | Created one real durable job. Reported queued/running status without claiming it had already completed. |
|
|
25
|
+
| 9 | Verify the final publication and compare saved analyses | Located the published snapshot. Exposed ambiguous interpretation of coverage metadata and ERC20 versus native RPC checks. |
|
|
26
|
+
| 10 | Recheck ERC20 discovery versus native RPC coverage | Corrected the coverage interpretation and identified unknown native balances. Both snapshots retained the same per-chain completeness/availability flags. |
|
|
27
|
+
|
|
28
|
+
These were not uniformly correct on the first attempt. Cases 2, 6 and 9 drove
|
|
29
|
+
implementation changes and follow-up questions. Case 10 still described the
|
|
30
|
+
exact cause of metadata differences as a possibility rather than using the
|
|
31
|
+
comparison definition; its per-chain conclusion matched the records. Model
|
|
32
|
+
answers remain interpretations of recorded evidence.
|
|
33
|
+
|
|
34
|
+
## Second question round
|
|
35
|
+
|
|
36
|
+
Ten additional Korean questions completed through the real native Claude CLI.
|
|
37
|
+
All ten received answers without a transport or model-process failure. This
|
|
38
|
+
does not mean every initial answer was factually correct. No new research job,
|
|
39
|
+
wallet, signature or trade was requested by this round.
|
|
40
|
+
|
|
41
|
+
| Case | Request | Observed result |
|
|
42
|
+
| --- | --- | --- |
|
|
43
|
+
| 1 | Mainnet totals, priced/unpriced counts and testnet exclusion | Counts and totals matched. Native observation times were missing from the supplied projection. |
|
|
44
|
+
| 2 | Same-symbol LP tokens and recorded market routes | Kept distinct contracts and quantities separate. Did not infer LP ownership or redemption from a market link. |
|
|
45
|
+
| 3 | Dormant tokens and full-balance disposal | Did not invent transfer history, inactivity or executable dollar proceeds. Preserved historical burn outputs. |
|
|
46
|
+
| 4 | ETH, WETH, Blast mainnet and Blast Sepolia | Kept identities, quantities and valuation scope separate. Exposed the same missing native observations. |
|
|
47
|
+
| 5 | Compare two saved analyses | Incorrectly described changes as timestamps only and treated an empty positive inventory as missing native evidence. |
|
|
48
|
+
| 6 | Verify the comparison flags | Corrected the flag interpretation, but normalized reads still omitted native observations and underlying reference values. |
|
|
49
|
+
| 7 | Read an unregistered wallet name | Returned wallet_not_registered. Did not substitute another wallet or invent a duplicate-name problem. |
|
|
50
|
+
| 8 | Detailed stablecoin markets and best exit | Distinguished recorded/displayed/omitted pools, quote-token prices and absent execution quotes. |
|
|
51
|
+
| 9 | Wallet-specific ERC20 discovery versus native RPC | Correctly separated coverage flags and known holdings from unknown networks. Native observation times remained omitted. |
|
|
52
|
+
| 10 | Chat capabilities and actual research completion | Correctly reported published partial jobs and unsupported creation/trading tools. Job-to-wallet identity required inference because the field was omitted. |
|
|
53
|
+
|
|
54
|
+
The follow-up fix includes explicit native balance observations, their times
|
|
55
|
+
and blocks, registry scan blocks and safe snapshot price-reference values.
|
|
56
|
+
An observed zero remains evidence without becoming a positive holding or
|
|
57
|
+
changing portfolio totals. Unavailable RPC balances remain null. Reference
|
|
58
|
+
source/debug fields remain excluded, including for mixed-case cbBTC references.
|
|
59
|
+
Scoped research job reads now name their approved wallet explicitly.
|
|
60
|
+
|
|
61
|
+
Two additional real questions verify the fix. One continued the original chat
|
|
62
|
+
and checked observations, reference changes and job identities. A separate
|
|
63
|
+
fresh-conversation test repeated the saved-analysis question without older
|
|
64
|
+
answers. Both returned the recorded zero/unknown distinction and correct
|
|
65
|
+
block/reference changes. The continued-chat check also matched every explicit
|
|
66
|
+
job-to-wallet identity. These verification questions are separate from the ten-case count.
|
|
67
|
+
Raw responses, original failures and financial evidence remain private.
|
|
68
|
+
|
|
69
|
+
The final regression suites passed 94 root Python tests and 46 viewer Python
|
|
70
|
+
tests, plus the declared Node and syntax checks. Two independent read-only
|
|
71
|
+
reviews checked the final projection delta. Their mixed-case reference finding
|
|
72
|
+
was corrected and rechecked.
|
|
73
|
+
|
|
74
|
+
## Wallet and research flows
|
|
75
|
+
|
|
76
|
+
- Added the exact operator-supplied watching address through the real form,
|
|
77
|
+
review step and submission. The research job published after 4m 55s.
|
|
78
|
+
- Created a real encrypted wallet with the pinned OWS SDK through the protected
|
|
79
|
+
local creation endpoint. The disposable passphrase was generated in memory.
|
|
80
|
+
Replaying the same creation identity recovered the same wallet and job.
|
|
81
|
+
No plaintext passphrase was found in the test workspace files.
|
|
82
|
+
- Checked the creation UI and required password validation. No new credential
|
|
83
|
+
was entered through browser automation. Human passphrase entry remains a
|
|
84
|
+
separate device acceptance step.
|
|
85
|
+
- Exercised OWS disconnect, existing-wallet selection and public-account
|
|
86
|
+
relinking through the UI. These preserved the existing registered wallet.
|
|
87
|
+
- The new-wallet research and agent-requested refresh each published after
|
|
88
|
+
roughly 37 seconds. Both retained coverage gaps. Three real research jobs
|
|
89
|
+
were saved, with no duplicate refresh admission.
|
|
90
|
+
- Opened both saved analyses and ran the actual comparison UI. Missing records
|
|
91
|
+
remained unknown. Coverage observations and price references were separate
|
|
92
|
+
from token balance changes.
|
|
93
|
+
- Tested a fresh unregistered-wallet deep link. It now opens Activity instead
|
|
94
|
+
of an empty or stale wallet panel.
|
|
95
|
+
|
|
96
|
+
## UI and design checks
|
|
97
|
+
|
|
98
|
+
Real browser checks covered Overview, watching and newly created wallet pages,
|
|
99
|
+
All tokens, Activity, token and network details, research notes, settings,
|
|
100
|
+
OWS forms, chat history, new chat, expanded chat and the mobile pane switch.
|
|
101
|
+
The actual browser sizes were 1728 by 941 and 537 by 941. The automation viewport
|
|
102
|
+
setting did not produce 390px, so phone-sized device acceptance is not claimed.
|
|
103
|
+
|
|
104
|
+
The catalog retained unpriced assets, supported testnet inclusion, reset search
|
|
105
|
+
pagination, paged after 50 rows and showed an explicit no-results state.
|
|
106
|
+
A token with many markets showed two pools initially and exposed all remaining
|
|
107
|
+
routes through disclosure. Token artwork loaded for the previously missing
|
|
108
|
+
contract. Token-specific wallet rows measured about 170px with a position and
|
|
109
|
+
107px without one. Neither browser width had page-level horizontal overflow.
|
|
110
|
+
|
|
111
|
+
The chat header, separate floating composer and background remained aligned.
|
|
112
|
+
Opening hidden mobile chat now follows the latest answer. Switching away and
|
|
113
|
+
back preserves an existing reading position. Clicking the already-active pane
|
|
114
|
+
and resizing the composer do not discard that position. Draft text survived
|
|
115
|
+
page navigation. Deliberate Stop returned an editable draft and no late answer.
|
|
116
|
+
Research notes currently open as the plain Markdown export in another tab.
|
|
117
|
+
|
|
118
|
+
## Fixes delivered
|
|
119
|
+
|
|
120
|
+
1. Allow exact-host top-level navigation to the public HTML shell from a link.
|
|
121
|
+
Cross-site API, session, asset and mutation access remain rejected.
|
|
122
|
+
2. Distinguish an absent wallet from multiple wallets sharing a name.
|
|
123
|
+
3. Route missing/pending wallet details through Activity, including initial
|
|
124
|
+
state polling.
|
|
125
|
+
4. Refresh custom dropdown labels after loading saved connection settings.
|
|
126
|
+
5. Keep code spans opaque inside Markdown emphasis, including literal stars.
|
|
127
|
+
6. Preserve recorded pool counts and summary notes in scoped agent reads.
|
|
128
|
+
Explain that omitted detail is available through a token-specific read.
|
|
129
|
+
7. Display registered OWS names or pending connection tags instead of internal
|
|
130
|
+
creation identities, without changing wallet IDs or SDK names.
|
|
131
|
+
8. Clarify empty holdings, ERC20 discovery versus native RPC availability, and
|
|
132
|
+
timestamp/block changes in comparison evidence.
|
|
133
|
+
9. Follow the latest mobile answer initially while preserving historical
|
|
134
|
+
reading positions through pane switches and composer resizing.
|
|
135
|
+
10. Retain scoped native zero/time/block observations and safe historical
|
|
136
|
+
price-reference evidence for accurate saved-analysis comparisons.
|
|
137
|
+
11. Name the approved wallet in research job reads instead of requiring
|
|
138
|
+
inference from blocks or receipts.
|
|
139
|
+
|
|
140
|
+
## Verification and release boundaries
|
|
141
|
+
|
|
142
|
+
`npm test` passed: 94 root Python tests, 46 viewer Python tests, all declared
|
|
143
|
+
Node suites and syntax checks. Independent backend and frontend reviewers
|
|
144
|
+
rechecked the final functional deltas. Their findings were fixed and verified.
|
|
145
|
+
A clean 71-member installation passed, including real encrypted OWS creation
|
|
146
|
+
with the pinned SDK and the installed viewer lifecycle. Package privacy checks
|
|
147
|
+
run before packing; the candidate manifest records the exact reviewed source commit.
|
|
148
|
+
|
|
149
|
+
The new candidate is 0.1.2. GitHub v0.1.1 and its archive remain immutable.
|
|
150
|
+
npm latest was still 0.1.0 when checked during this run. No registry publication,
|
|
151
|
+
PR merge, direct default-branch push or production deployment was performed.
|
|
152
|
+
Private screenshots, transcripts, wallet addresses and financial observations
|
|
153
|
+
remain outside the public source and package. The test vault received no funds,
|
|
154
|
+
and no signing or trading was performed.
|