shortcutxl 0.2.12 → 0.2.13
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 +26 -26
- package/agent-docs/README.md +397 -397
- package/agent-docs/docs/compaction.md +390 -390
- package/agent-docs/docs/custom-provider.md +580 -580
- package/agent-docs/docs/extensions.md +1971 -1971
- package/agent-docs/docs/packages.md +209 -209
- package/agent-docs/docs/rpc.md +1317 -1317
- package/agent-docs/docs/sdk.md +962 -962
- package/agent-docs/docs/session.md +412 -412
- package/agent-docs/docs/termux.md +127 -127
- package/agent-docs/docs/tui.md +887 -887
- package/agent-docs/examples/README.md +25 -25
- package/agent-docs/examples/extensions/README.md +205 -205
- package/agent-docs/examples/extensions/antigravity-image-gen.ts +447 -447
- package/agent-docs/examples/extensions/auto-commit-on-exit.ts +49 -49
- package/agent-docs/examples/extensions/bash-spawn-hook.ts +30 -30
- package/agent-docs/examples/extensions/bookmark.ts +50 -50
- package/agent-docs/examples/extensions/built-in-tool-renderer.ts +256 -256
- package/agent-docs/examples/extensions/claude-rules.ts +86 -86
- package/agent-docs/examples/extensions/commands.ts +75 -75
- package/agent-docs/examples/extensions/confirm-destructive.ts +59 -59
- package/agent-docs/examples/extensions/custom-compaction.ts +126 -126
- package/agent-docs/examples/extensions/custom-footer.ts +63 -63
- package/agent-docs/examples/extensions/custom-header.ts +73 -73
- package/agent-docs/examples/extensions/custom-provider-anthropic/index.ts +660 -660
- package/agent-docs/examples/extensions/custom-provider-gitlab-duo/index.ts +362 -362
- package/agent-docs/examples/extensions/custom-provider-gitlab-duo/test.ts +88 -88
- package/agent-docs/examples/extensions/custom-provider-qwen-cli/index.ts +349 -349
- package/agent-docs/examples/extensions/dirty-repo-guard.ts +56 -56
- package/agent-docs/examples/extensions/doom-overlay/doom-component.ts +133 -133
- package/agent-docs/examples/extensions/doom-overlay/doom-keys.ts +108 -108
- package/agent-docs/examples/extensions/doom-overlay/index.ts +74 -74
- package/agent-docs/examples/extensions/dynamic-resources/index.ts +15 -15
- package/agent-docs/examples/extensions/dynamic-tools.ts +77 -77
- package/agent-docs/examples/extensions/event-bus.ts +43 -43
- package/agent-docs/examples/extensions/file-trigger.ts +41 -41
- package/agent-docs/examples/extensions/git-checkpoint.ts +53 -53
- package/agent-docs/examples/extensions/handoff.ts +155 -155
- package/agent-docs/examples/extensions/hello.ts +25 -25
- package/agent-docs/examples/extensions/inline-bash.ts +94 -94
- package/agent-docs/examples/extensions/input-transform.ts +43 -43
- package/agent-docs/examples/extensions/interactive-shell.ts +209 -209
- package/agent-docs/examples/extensions/mac-system-theme.ts +47 -47
- package/agent-docs/examples/extensions/message-renderer.ts +59 -59
- package/agent-docs/examples/extensions/minimal-mode.ts +430 -430
- package/agent-docs/examples/extensions/modal-editor.ts +90 -90
- package/agent-docs/examples/extensions/model-status.ts +31 -31
- package/agent-docs/examples/extensions/notify.ts +55 -55
- package/agent-docs/examples/extensions/overlay-qa-tests.ts +936 -936
- package/agent-docs/examples/extensions/overlay-test.ts +159 -159
- package/agent-docs/examples/extensions/permission-gate.ts +37 -37
- package/agent-docs/examples/extensions/pirate.ts +47 -47
- package/agent-docs/examples/extensions/plan-mode/index.ts +363 -363
- package/agent-docs/examples/extensions/preset.ts +418 -418
- package/agent-docs/examples/extensions/protected-paths.ts +30 -30
- package/agent-docs/examples/extensions/qna.ts +122 -122
- package/agent-docs/examples/extensions/question.ts +278 -278
- package/agent-docs/examples/extensions/questionnaire.ts +440 -440
- package/agent-docs/examples/extensions/rainbow-editor.ts +90 -90
- package/agent-docs/examples/extensions/reload-runtime.ts +37 -37
- package/agent-docs/examples/extensions/rpc-demo.ts +124 -124
- package/agent-docs/examples/extensions/sandbox/index.ts +324 -324
- package/agent-docs/examples/extensions/send-user-message.ts +97 -97
- package/agent-docs/examples/extensions/session-name.ts +27 -27
- package/agent-docs/examples/extensions/shutdown-command.ts +69 -69
- package/agent-docs/examples/extensions/snake.ts +343 -343
- package/agent-docs/examples/extensions/space-invaders.ts +566 -566
- package/agent-docs/examples/extensions/ssh.ts +233 -233
- package/agent-docs/examples/extensions/status-line.ts +40 -40
- package/agent-docs/examples/extensions/subagent/agents.ts +130 -130
- package/agent-docs/examples/extensions/subagent/index.ts +1068 -1068
- package/agent-docs/examples/extensions/summarize.ts +206 -206
- package/agent-docs/examples/extensions/system-prompt-header.ts +17 -17
- package/agent-docs/examples/extensions/timed-confirm.ts +72 -72
- package/agent-docs/examples/extensions/titlebar-spinner.ts +58 -58
- package/agent-docs/examples/extensions/todo.ts +314 -314
- package/agent-docs/examples/extensions/tool-override.ts +146 -146
- package/agent-docs/examples/extensions/tools.ts +145 -145
- package/agent-docs/examples/extensions/trigger-compact.ts +40 -40
- package/agent-docs/examples/extensions/truncated-tool.ts +194 -194
- package/agent-docs/examples/extensions/widget-placement.ts +17 -17
- package/agent-docs/examples/extensions/with-deps/index.ts +37 -37
- package/agent-docs/examples/rpc-extension-ui.ts +654 -654
- package/agent-docs/examples/sdk/01-minimal.ts +22 -22
- package/agent-docs/examples/sdk/02-custom-model.ts +48 -48
- package/agent-docs/examples/sdk/03-custom-prompt.ts +55 -55
- package/agent-docs/examples/sdk/04-skills.ts +53 -53
- package/agent-docs/examples/sdk/05-tools.ts +56 -56
- package/agent-docs/examples/sdk/06-extensions.ts +88 -88
- package/agent-docs/examples/sdk/07-context-files.ts +40 -40
- package/agent-docs/examples/sdk/08-prompt-templates.ts +47 -47
- package/agent-docs/examples/sdk/09-api-keys-and-oauth.ts +48 -48
- package/agent-docs/examples/sdk/10-settings.ts +54 -54
- package/agent-docs/examples/sdk/11-sessions.ts +48 -48
- package/agent-docs/examples/sdk/12-full-control.ts +82 -82
- package/agent-docs/examples/sdk/README.md +144 -144
- package/agent-docs/xll-spec.md +110 -110
- package/dist/core/auth-storage.js +21 -2
- package/package.json +1 -1
- package/xll/ShortcutXL.xll +0 -0
- package/xll/modules/debug_render.py +272 -272
- package/xll/modules/gameboy.py +241 -241
- package/xll/modules/pong.py +188 -188
- package/xll/modules/shortcut_xl/_diff_highlight.py +176 -0
- package/xll/modules/shortcut_xl/_log.py +12 -12
- package/xll/modules/shortcut_xl/_registry.py +44 -44
- package/xll/modules/stocks.py +100 -100
- /package/skills/{com-advanced-api → COM-advanced-api}/SKILL.md +0 -0
- /package/skills/{com-advanced-api → COM-advanced-api}/excel-type-library.py +0 -0
- /package/skills/{com-advanced-api → COM-advanced-api}/office-type-library.py +0 -0
package/xll/modules/stocks.py
CHANGED
|
@@ -1,100 +1,100 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Live stock quotes in Excel — powered by Yahoo Finance.
|
|
3
|
-
|
|
4
|
-
Functions:
|
|
5
|
-
=stock(ticker) current price
|
|
6
|
-
=stock_change(ticker) $ change from prev close
|
|
7
|
-
=stock_pct(ticker) % change from prev close
|
|
8
|
-
=stock_vol(ticker) volume
|
|
9
|
-
=stock_high(ticker) day high
|
|
10
|
-
=stock_low(ticker) day low
|
|
11
|
-
=stock_open(ticker) opening price
|
|
12
|
-
=stock_name(ticker) company name
|
|
13
|
-
|
|
14
|
-
All results are cached for 15 seconds to avoid hammering the API.
|
|
15
|
-
"""
|
|
16
|
-
|
|
17
|
-
from shortcut_xl import xl_func
|
|
18
|
-
import urllib.request
|
|
19
|
-
import json
|
|
20
|
-
import time
|
|
21
|
-
import threading
|
|
22
|
-
|
|
23
|
-
_cache = {}
|
|
24
|
-
_CACHE_TTL = 15
|
|
25
|
-
_lock = threading.Lock()
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def _fetch(ticker):
|
|
29
|
-
ticker = str(ticker).upper().strip()
|
|
30
|
-
now = time.time()
|
|
31
|
-
with _lock:
|
|
32
|
-
if ticker in _cache and now - _cache[ticker]['t'] < _CACHE_TTL:
|
|
33
|
-
return _cache[ticker]['d']
|
|
34
|
-
|
|
35
|
-
url = (
|
|
36
|
-
f"https://query1.finance.yahoo.com/v8/finance/chart/{ticker}"
|
|
37
|
-
f"?interval=1d&range=1d"
|
|
38
|
-
)
|
|
39
|
-
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
|
|
40
|
-
with urllib.request.urlopen(req, timeout=5) as resp:
|
|
41
|
-
raw = json.loads(resp.read())
|
|
42
|
-
|
|
43
|
-
meta = raw["chart"]["result"][0]["meta"]
|
|
44
|
-
d = {
|
|
45
|
-
"price": meta.get("regularMarketPrice", 0),
|
|
46
|
-
"prev": meta.get("chartPreviousClose", 0) or meta.get("previousClose", 0),
|
|
47
|
-
"open": meta.get("regularMarketOpen", 0),
|
|
48
|
-
"high": meta.get("regularMarketDayHigh", 0),
|
|
49
|
-
"low": meta.get("regularMarketDayLow", 0),
|
|
50
|
-
"vol": meta.get("regularMarketVolume", 0),
|
|
51
|
-
"name": meta.get("shortName", ticker),
|
|
52
|
-
}
|
|
53
|
-
with _lock:
|
|
54
|
-
_cache[ticker] = {"d": d, "t": time.time()}
|
|
55
|
-
return d
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
def _safe(fn):
|
|
59
|
-
try:
|
|
60
|
-
return fn()
|
|
61
|
-
except Exception as e:
|
|
62
|
-
return f"#ERR {e}"
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
@xl_func
|
|
66
|
-
def stock(ticker):
|
|
67
|
-
return _safe(lambda: _fetch(ticker)["price"])
|
|
68
|
-
|
|
69
|
-
@xl_func
|
|
70
|
-
def stock_change(ticker):
|
|
71
|
-
return _safe(lambda: round(_fetch(ticker)["price"] - _fetch(ticker)["prev"], 2))
|
|
72
|
-
|
|
73
|
-
@xl_func
|
|
74
|
-
def stock_pct(ticker):
|
|
75
|
-
def _calc():
|
|
76
|
-
d = _fetch(ticker)
|
|
77
|
-
if d["prev"] == 0:
|
|
78
|
-
return 0
|
|
79
|
-
return round((d["price"] - d["prev"]) / d["prev"] * 100, 2)
|
|
80
|
-
return _safe(_calc)
|
|
81
|
-
|
|
82
|
-
@xl_func
|
|
83
|
-
def stock_vol(ticker):
|
|
84
|
-
return _safe(lambda: _fetch(ticker)["vol"])
|
|
85
|
-
|
|
86
|
-
@xl_func
|
|
87
|
-
def stock_high(ticker):
|
|
88
|
-
return _safe(lambda: _fetch(ticker)["high"])
|
|
89
|
-
|
|
90
|
-
@xl_func
|
|
91
|
-
def stock_low(ticker):
|
|
92
|
-
return _safe(lambda: _fetch(ticker)["low"])
|
|
93
|
-
|
|
94
|
-
@xl_func
|
|
95
|
-
def stock_open(ticker):
|
|
96
|
-
return _safe(lambda: _fetch(ticker)["open"])
|
|
97
|
-
|
|
98
|
-
@xl_func
|
|
99
|
-
def stock_name(ticker):
|
|
100
|
-
return _safe(lambda: _fetch(ticker)["name"])
|
|
1
|
+
"""
|
|
2
|
+
Live stock quotes in Excel — powered by Yahoo Finance.
|
|
3
|
+
|
|
4
|
+
Functions:
|
|
5
|
+
=stock(ticker) current price
|
|
6
|
+
=stock_change(ticker) $ change from prev close
|
|
7
|
+
=stock_pct(ticker) % change from prev close
|
|
8
|
+
=stock_vol(ticker) volume
|
|
9
|
+
=stock_high(ticker) day high
|
|
10
|
+
=stock_low(ticker) day low
|
|
11
|
+
=stock_open(ticker) opening price
|
|
12
|
+
=stock_name(ticker) company name
|
|
13
|
+
|
|
14
|
+
All results are cached for 15 seconds to avoid hammering the API.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from shortcut_xl import xl_func
|
|
18
|
+
import urllib.request
|
|
19
|
+
import json
|
|
20
|
+
import time
|
|
21
|
+
import threading
|
|
22
|
+
|
|
23
|
+
_cache = {}
|
|
24
|
+
_CACHE_TTL = 15
|
|
25
|
+
_lock = threading.Lock()
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _fetch(ticker):
|
|
29
|
+
ticker = str(ticker).upper().strip()
|
|
30
|
+
now = time.time()
|
|
31
|
+
with _lock:
|
|
32
|
+
if ticker in _cache and now - _cache[ticker]['t'] < _CACHE_TTL:
|
|
33
|
+
return _cache[ticker]['d']
|
|
34
|
+
|
|
35
|
+
url = (
|
|
36
|
+
f"https://query1.finance.yahoo.com/v8/finance/chart/{ticker}"
|
|
37
|
+
f"?interval=1d&range=1d"
|
|
38
|
+
)
|
|
39
|
+
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
|
|
40
|
+
with urllib.request.urlopen(req, timeout=5) as resp:
|
|
41
|
+
raw = json.loads(resp.read())
|
|
42
|
+
|
|
43
|
+
meta = raw["chart"]["result"][0]["meta"]
|
|
44
|
+
d = {
|
|
45
|
+
"price": meta.get("regularMarketPrice", 0),
|
|
46
|
+
"prev": meta.get("chartPreviousClose", 0) or meta.get("previousClose", 0),
|
|
47
|
+
"open": meta.get("regularMarketOpen", 0),
|
|
48
|
+
"high": meta.get("regularMarketDayHigh", 0),
|
|
49
|
+
"low": meta.get("regularMarketDayLow", 0),
|
|
50
|
+
"vol": meta.get("regularMarketVolume", 0),
|
|
51
|
+
"name": meta.get("shortName", ticker),
|
|
52
|
+
}
|
|
53
|
+
with _lock:
|
|
54
|
+
_cache[ticker] = {"d": d, "t": time.time()}
|
|
55
|
+
return d
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _safe(fn):
|
|
59
|
+
try:
|
|
60
|
+
return fn()
|
|
61
|
+
except Exception as e:
|
|
62
|
+
return f"#ERR {e}"
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@xl_func
|
|
66
|
+
def stock(ticker):
|
|
67
|
+
return _safe(lambda: _fetch(ticker)["price"])
|
|
68
|
+
|
|
69
|
+
@xl_func
|
|
70
|
+
def stock_change(ticker):
|
|
71
|
+
return _safe(lambda: round(_fetch(ticker)["price"] - _fetch(ticker)["prev"], 2))
|
|
72
|
+
|
|
73
|
+
@xl_func
|
|
74
|
+
def stock_pct(ticker):
|
|
75
|
+
def _calc():
|
|
76
|
+
d = _fetch(ticker)
|
|
77
|
+
if d["prev"] == 0:
|
|
78
|
+
return 0
|
|
79
|
+
return round((d["price"] - d["prev"]) / d["prev"] * 100, 2)
|
|
80
|
+
return _safe(_calc)
|
|
81
|
+
|
|
82
|
+
@xl_func
|
|
83
|
+
def stock_vol(ticker):
|
|
84
|
+
return _safe(lambda: _fetch(ticker)["vol"])
|
|
85
|
+
|
|
86
|
+
@xl_func
|
|
87
|
+
def stock_high(ticker):
|
|
88
|
+
return _safe(lambda: _fetch(ticker)["high"])
|
|
89
|
+
|
|
90
|
+
@xl_func
|
|
91
|
+
def stock_low(ticker):
|
|
92
|
+
return _safe(lambda: _fetch(ticker)["low"])
|
|
93
|
+
|
|
94
|
+
@xl_func
|
|
95
|
+
def stock_open(ticker):
|
|
96
|
+
return _safe(lambda: _fetch(ticker)["open"])
|
|
97
|
+
|
|
98
|
+
@xl_func
|
|
99
|
+
def stock_name(ticker):
|
|
100
|
+
return _safe(lambda: _fetch(ticker)["name"])
|
|
File without changes
|
|
File without changes
|
|
File without changes
|