@skrr-ai/cli 0.1.45 → 0.1.46
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/dist/base-command.d.ts +13 -1
- package/dist/base-command.js +37 -3
- package/dist/commands/agents/actions/create.js +11 -4
- package/dist/commands/browser/cloud-agents.js +4 -0
- package/dist/commands/code/handover.d.ts +11 -0
- package/dist/commands/code/handover.js +105 -1
- package/dist/commands/commitments/handover.d.ts +29 -0
- package/dist/commands/commitments/handover.js +99 -0
- package/dist/commands/followups/watch.js +40 -5
- package/dist/commands/tasks/fork.d.ts +32 -0
- package/dist/commands/tasks/fork.js +171 -0
- package/dist/commands/tasks/handover.d.ts +23 -0
- package/dist/commands/tasks/handover.js +205 -0
- package/dist/commands/tasks/promote.d.ts +23 -0
- package/dist/commands/tasks/promote.js +82 -0
- package/dist/commands/tasks/runs.d.ts +16 -0
- package/dist/commands/tasks/runs.js +46 -1
- package/dist/commands/tasks/show.d.ts +23 -0
- package/dist/commands/tasks/show.js +59 -0
- package/dist/lib/api-fetch.d.ts +7 -1
- package/dist/lib/api-fetch.js +9 -2
- package/dist/lib/code-handover.d.ts +60 -0
- package/dist/lib/code-handover.js +120 -0
- package/dist/lib/commitments.d.ts +22 -0
- package/dist/lib/commitments.js +42 -0
- package/dist/lib/dedicated-wait.js +22 -1
- package/dist/lib/followups.d.ts +18 -0
- package/dist/lib/followups.js +44 -0
- package/dist/lib/node-adapter.js +6 -0
- package/dist/lib/task-extras.d.ts +44 -0
- package/dist/lib/task-extras.js +73 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/firstPartyHarness.d.ts +8 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/firstPartyHarness.js +7 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/firstPartyHarnessHome.js +45 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/harnessSkillLayout.d.ts +65 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/harnessSkillLayout.js +99 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/index.d.ts +1 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/index.js +10 -2
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/firstPartyHarness.d.ts +8 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/firstPartyHarness.js +7 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/firstPartyHarnessHome.js +45 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/harnessSkillLayout.d.ts +65 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/harnessSkillLayout.js +94 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/index.d.ts +1 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/index.js +5 -0
- package/dist/node_modules/@skrr-ai/auth-core/package.json +11 -1
- package/dist/node_modules/@skrr-ai/data-provider/index.js +2242 -2234
- package/dist/node_modules/@skrr-ai/inference-broker/package.json +1 -1
- package/oclif.manifest.json +35697 -35300
- package/package.json +2 -2
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OSK-10409 — which harnesses resolve the `.claude/skills/<name>/SKILL.md`
|
|
3
|
+
* layout, shared by the server and the daemon.
|
|
4
|
+
*
|
|
5
|
+
* ── Why this lives in auth-core ────────────────────────────────────────────
|
|
6
|
+
*
|
|
7
|
+
* The same reason `harnessTrust.ts` does: it is a DECLARED per-harness fact
|
|
8
|
+
* that several processes have to agree on, and the cost of them disagreeing is
|
|
9
|
+
* silent. It is not auth, and it does not pretend to be — auth-core is where
|
|
10
|
+
* this repo already keeps the small tables that a harness's identity answers.
|
|
11
|
+
*
|
|
12
|
+
* ── What the fact IS ───────────────────────────────────────────────────────
|
|
13
|
+
*
|
|
14
|
+
* The daemon materializes a session's skills at
|
|
15
|
+
* `<root>/.claude/skills/<name>/SKILL.md` and hands `<root>` to the harness —
|
|
16
|
+
* `--add-dir` for the Claude CLI, ACP `additionalDirectories` for Devin. A
|
|
17
|
+
* harness on this list READS that layout: it enumerates the tree, surfaces the
|
|
18
|
+
* manifest line, and resolves the body from disk. A harness that is not on it
|
|
19
|
+
* ignores the tree entirely, so nothing laid there ever reaches its model.
|
|
20
|
+
*
|
|
21
|
+
* It is a capability with EVIDENCE, never a brand check. The gate this replaced
|
|
22
|
+
* read `provider !== 'claude'` on the stated premise that every other harness
|
|
23
|
+
* ignores the layout, and the premise was false for Devin (OSK-10264): the
|
|
24
|
+
* daemon lays the same tree, passes it on `additionalDirectories`, and Devin
|
|
25
|
+
* loads it — measured live on 3000.10.31. Add a harness here only with the same
|
|
26
|
+
* kind of evidence, that its sessions actually surface a skill laid out this
|
|
27
|
+
* way. A harness that ignores the layout gains nothing and pays for the wire.
|
|
28
|
+
*
|
|
29
|
+
* ── Three readers, in three directions ─────────────────────────────────────
|
|
30
|
+
*
|
|
31
|
+
* 1. The server's PUSH gate (`buildDaemonServerSkills`): a harness on this
|
|
32
|
+
* list is one a pushed skill should be sent to.
|
|
33
|
+
* 2. The server's INVOKED-BODY gate (`buildInvokedSkillsPrompt`, OSK-10361):
|
|
34
|
+
* a harness on this list must NOT also have the body pasted into its
|
|
35
|
+
* prompt — it already has it from the tree, and on ACP the paste lands in
|
|
36
|
+
* the transcript at full skill size on every invoked turn.
|
|
37
|
+
* 3. The daemon's SHADOWING protection (`skill-shadowing.ts`, OSK-10044): a
|
|
38
|
+
* harness on this list resolves `/<name>` from its own `.claude/skills`
|
|
39
|
+
* roots, so a picked skill can be shadowed there by a same-named one — and
|
|
40
|
+
* the daemon is the only place that collision can be seen. That gate spelled
|
|
41
|
+
* `claude` and so never reached Devin, which the server-side paste was
|
|
42
|
+
* accidentally masking until (2) stopped pasting.
|
|
43
|
+
*
|
|
44
|
+
* Reader 3 is why the table moved out of the API: the daemon cannot require an
|
|
45
|
+
* api-side module, and a second copy of a table whose whole value is that every
|
|
46
|
+
* reader agrees is worse than no table at all.
|
|
47
|
+
*/
|
|
48
|
+
import { canonicalHarnessProvider } from './firstPartyHarness.js';
|
|
49
|
+
/**
|
|
50
|
+
* Harness provider → the evidence that its sessions load the layout.
|
|
51
|
+
*
|
|
52
|
+
* The reason string is part of the entry, not decoration: an entry added
|
|
53
|
+
* without one is an entry nobody can audit later.
|
|
54
|
+
*/
|
|
55
|
+
export const HARNESSES_LOADING_CLAUDE_SKILLS_LAYOUT = new Map([
|
|
56
|
+
['claude', 'Claude Code reads .claude/skills natively from --add-dir'],
|
|
57
|
+
[
|
|
58
|
+
'devin',
|
|
59
|
+
'Devin imports the Claude convention from additionalDirectories ' +
|
|
60
|
+
'(read_config_from.claude, on by default) — verified live on 3000.10.31',
|
|
61
|
+
],
|
|
62
|
+
]);
|
|
63
|
+
/**
|
|
64
|
+
* Canonicalise the way every reader of this table must.
|
|
65
|
+
*
|
|
66
|
+
* The provider is lower-cased and trimmed, then passed through
|
|
67
|
+
* `canonicalHarnessProvider` so an accepted alias of the first-party harness
|
|
68
|
+
* resolves to the same decision as its canonical slug rather than falling
|
|
69
|
+
* through to "not a native resolver". Callers with a RICHER normalizer (the API
|
|
70
|
+
* has `normalizeSessionProvider`, which also folds `claude-code`) apply theirs
|
|
71
|
+
* first; this is the floor, not a replacement.
|
|
72
|
+
*/
|
|
73
|
+
function canonicalize(provider) {
|
|
74
|
+
return String(canonicalHarnessProvider(provider.trim().toLowerCase()));
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Whether this harness resolves a skill from the `.claude/skills` tree the
|
|
78
|
+
* daemon materializes, so the body reaches it without being pasted anywhere.
|
|
79
|
+
*
|
|
80
|
+
* An absent provider is NOT a native resolver. "We do not know what this is"
|
|
81
|
+
* must never mean "it reads the layout" — that direction withholds the body
|
|
82
|
+
* from a harness that needed it, which is a turn that looks like the skill ran.
|
|
83
|
+
*/
|
|
84
|
+
export function harnessLoadsClaudeSkillsLayout(provider) {
|
|
85
|
+
if (!provider || typeof provider !== 'string')
|
|
86
|
+
return false;
|
|
87
|
+
return HARNESSES_LOADING_CLAUDE_SKILLS_LAYOUT.has(canonicalize(provider));
|
|
88
|
+
}
|
|
89
|
+
/** The stated evidence for a harness on the list, or `null` when it is not. */
|
|
90
|
+
export function claudeSkillsLayoutEvidence(provider) {
|
|
91
|
+
if (!provider || typeof provider !== 'string')
|
|
92
|
+
return null;
|
|
93
|
+
return HARNESSES_LOADING_CLAUDE_SKILLS_LAYOUT.get(canonicalize(provider)) ?? null;
|
|
94
|
+
}
|
|
@@ -32,6 +32,7 @@ export { initDeviceIdentity, resetDeviceIdentity, signServerRequest, enrollWithS
|
|
|
32
32
|
export { ensureMachineDaemonId, legacyDaemonUuids, __resetCachedDaemonIdForTest, } from './machineId.js';
|
|
33
33
|
export { PAIR_AAD_PREFIX, PAIR_AAD_MAX_LEN, PAIR_BUNDLE_MAX_BASE64_LEN, PAIR_NONCE_LEN, PAIR_PUBKEY_LEN, PAIR_SECRET_LEN, PairBundleError, assemblePairBundleBase64, base64ToUint8Array as pairBase64ToUint8Array, base64UrlToUint8Array as pairBase64UrlToUint8Array, buildPairAad, buildPairUrl, generatePairKeyPair, openPairBundleBase64, parsePairBundle, parsePairPlaintext, parsePairUrl, uint8ArrayToBase64 as pairUint8ArrayToBase64, uint8ArrayToBase64Url as pairUint8ArrayToBase64Url, type AssembleBundleOptions as PairAssembleBundleOptions, type OpenBundleOptions as PairOpenBundleOptions, type PairBundle, type PairBundleErrorCode, type PairKeyPair, type PairPlaintextV1, type PairUrlFields, } from './daemonPair.js';
|
|
34
34
|
export { HARNESS_TIERS, getHarnessTier, credentialPolicyForTier, tierPermitsConfiguredAutoMode, type HarnessTrustTier, type CredentialDeliveryPolicy, type CredentialMode, } from './harnessTrust.js';
|
|
35
|
+
export { HARNESSES_LOADING_CLAUDE_SKILLS_LAYOUT, claudeSkillsLayoutEvidence, harnessLoadsClaudeSkillsLayout, } from './harnessSkillLayout.js';
|
|
35
36
|
export { sanitizeSpawnEnv, SENSITIVE_ENV_VARS, SENSITIVE_ENV_PREFIXES, SENSITIVE_ENV_SUFFIXES, SENSITIVE_ENV_NAME_TOKENS, SENSITIVE_ENV_PREFIX_EXCEPTIONS, } from './spawnEnv.js';
|
|
36
37
|
export { CONFIG_DIR_NAME, LEGACY_CONFIG_DIR_NAMES, NATIVE_ID_PREFIX, LEGACY_NATIVE_ID_PREFIXES, DEFAULT_BINARY_NAME, } from './localIdentity.js';
|
|
37
38
|
export { findLegacyLocalState, describeLegacyState, type LegacyStateFinding, type LegacyStateReport, } from './legacyStatePreflight.js';
|
|
@@ -130,6 +130,11 @@ export { PAIR_AAD_PREFIX, PAIR_AAD_MAX_LEN, PAIR_BUNDLE_MAX_BASE64_LEN, PAIR_NON
|
|
|
130
130
|
// in the daemon on purpose: a tier is a published fact, provenance is evidence
|
|
131
131
|
// about bytes on disk that only the spawning process can gather.
|
|
132
132
|
export { HARNESS_TIERS, getHarnessTier, credentialPolicyForTier, tierPermitsConfiguredAutoMode, } from './harnessTrust.js';
|
|
133
|
+
// OSK-10409 — which harnesses resolve the `.claude/skills` layout the daemon
|
|
134
|
+
// materializes. One declared table with per-harness evidence, read by the
|
|
135
|
+
// server's two skill gates and by the daemon's shadowing protection. See
|
|
136
|
+
// harnessSkillLayout.ts for why a second copy would be worse than none.
|
|
137
|
+
export { HARNESSES_LOADING_CLAUDE_SKILLS_LAYOUT, claudeSkillsLayoutEvidence, harnessLoadsClaudeSkillsLayout, } from './harnessSkillLayout.js';
|
|
133
138
|
// OSK-3892 — spawn-env sanitization, shared by the daemon (which has stripped
|
|
134
139
|
// its own credentials before every harness spawn all along) and the CLI (which
|
|
135
140
|
// spawns the SAME engine and did not). `daemon/src/env-sanitize.ts` re-exports
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skrr-ai/auth-core",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"main": "dist/cjs/index.js",
|
|
5
5
|
"types": "dist/esm/index.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -33,6 +33,16 @@
|
|
|
33
33
|
"types": "./dist/cjs/firstPartyHarness.d.ts",
|
|
34
34
|
"default": "./dist/cjs/firstPartyHarness.js"
|
|
35
35
|
}
|
|
36
|
+
},
|
|
37
|
+
"./harness-skill-layout": {
|
|
38
|
+
"import": {
|
|
39
|
+
"types": "./dist/esm/harnessSkillLayout.d.ts",
|
|
40
|
+
"default": "./dist/esm/harnessSkillLayout.js"
|
|
41
|
+
},
|
|
42
|
+
"require": {
|
|
43
|
+
"types": "./dist/cjs/harnessSkillLayout.d.ts",
|
|
44
|
+
"default": "./dist/cjs/harnessSkillLayout.js"
|
|
45
|
+
}
|
|
36
46
|
}
|
|
37
47
|
},
|
|
38
48
|
"dependencies": {
|