@orcalang/orca-lang 0.1.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/LICENSE +176 -0
- package/README.md +128 -0
- package/dist/auth/index.d.ts +6 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +6 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/lock.d.ts +2 -0
- package/dist/auth/lock.d.ts.map +1 -0
- package/dist/auth/lock.js +59 -0
- package/dist/auth/lock.js.map +1 -0
- package/dist/auth/providers/anthropic.d.ts +14 -0
- package/dist/auth/providers/anthropic.d.ts.map +1 -0
- package/dist/auth/providers/anthropic.js +145 -0
- package/dist/auth/providers/anthropic.js.map +1 -0
- package/dist/auth/providers/index.d.ts +3 -0
- package/dist/auth/providers/index.d.ts.map +1 -0
- package/dist/auth/providers/index.js +3 -0
- package/dist/auth/providers/index.js.map +1 -0
- package/dist/auth/providers/minimax.d.ts +6 -0
- package/dist/auth/providers/minimax.d.ts.map +1 -0
- package/dist/auth/providers/minimax.js +65 -0
- package/dist/auth/providers/minimax.js.map +1 -0
- package/dist/auth/refresh.d.ts +8 -0
- package/dist/auth/refresh.d.ts.map +1 -0
- package/dist/auth/refresh.js +104 -0
- package/dist/auth/refresh.js.map +1 -0
- package/dist/auth/store.d.ts +11 -0
- package/dist/auth/store.d.ts.map +1 -0
- package/dist/auth/store.js +63 -0
- package/dist/auth/store.js.map +1 -0
- package/dist/auth/types.d.ts +51 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +2 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/compiler/mermaid.d.ts +3 -0
- package/dist/compiler/mermaid.d.ts.map +1 -0
- package/dist/compiler/mermaid.js +86 -0
- package/dist/compiler/mermaid.js.map +1 -0
- package/dist/compiler/xstate.d.ts +15 -0
- package/dist/compiler/xstate.d.ts.map +1 -0
- package/dist/compiler/xstate.js +542 -0
- package/dist/compiler/xstate.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +4 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +109 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +13 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +8 -0
- package/dist/config/types.js.map +1 -0
- package/dist/generators/index.d.ts +5 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +5 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/registry.d.ts +12 -0
- package/dist/generators/registry.d.ts.map +1 -0
- package/dist/generators/registry.js +15 -0
- package/dist/generators/registry.js.map +1 -0
- package/dist/generators/typescript.d.ts +9 -0
- package/dist/generators/typescript.d.ts.map +1 -0
- package/dist/generators/typescript.js +55 -0
- package/dist/generators/typescript.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +630 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/anthropic.d.ts +14 -0
- package/dist/llm/anthropic.d.ts.map +1 -0
- package/dist/llm/anthropic.js +87 -0
- package/dist/llm/anthropic.js.map +1 -0
- package/dist/llm/grok.d.ts +13 -0
- package/dist/llm/grok.d.ts.map +1 -0
- package/dist/llm/grok.js +60 -0
- package/dist/llm/grok.js.map +1 -0
- package/dist/llm/index.d.ts +11 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +23 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/ollama.d.ts +11 -0
- package/dist/llm/ollama.d.ts.map +1 -0
- package/dist/llm/ollama.js +51 -0
- package/dist/llm/ollama.js.map +1 -0
- package/dist/llm/openai.d.ts +13 -0
- package/dist/llm/openai.d.ts.map +1 -0
- package/dist/llm/openai.js +61 -0
- package/dist/llm/openai.js.map +1 -0
- package/dist/llm/provider.d.ts +32 -0
- package/dist/llm/provider.d.ts.map +1 -0
- package/dist/llm/provider.js +2 -0
- package/dist/llm/provider.js.map +1 -0
- package/dist/parser/ast-to-markdown.d.ts +3 -0
- package/dist/parser/ast-to-markdown.d.ts.map +1 -0
- package/dist/parser/ast-to-markdown.js +209 -0
- package/dist/parser/ast-to-markdown.js.map +1 -0
- package/dist/parser/ast.d.ts +183 -0
- package/dist/parser/ast.d.ts.map +1 -0
- package/dist/parser/ast.js +3 -0
- package/dist/parser/ast.js.map +1 -0
- package/dist/parser/markdown-parser.d.ts +8 -0
- package/dist/parser/markdown-parser.d.ts.map +1 -0
- package/dist/parser/markdown-parser.js +838 -0
- package/dist/parser/markdown-parser.js.map +1 -0
- package/dist/runtime/effects.d.ts +17 -0
- package/dist/runtime/effects.d.ts.map +1 -0
- package/dist/runtime/effects.js +28 -0
- package/dist/runtime/effects.js.map +1 -0
- package/dist/runtime/machine.d.ts +8 -0
- package/dist/runtime/machine.d.ts.map +1 -0
- package/dist/runtime/machine.js +158 -0
- package/dist/runtime/machine.js.map +1 -0
- package/dist/runtime/types.d.ts +37 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +3 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/skills.d.ts +114 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +1103 -0
- package/dist/skills.js.map +1 -0
- package/dist/tools.d.ts +18 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +124 -0
- package/dist/tools.js.map +1 -0
- package/dist/verifier/completeness.d.ts +4 -0
- package/dist/verifier/completeness.d.ts.map +1 -0
- package/dist/verifier/completeness.js +82 -0
- package/dist/verifier/completeness.js.map +1 -0
- package/dist/verifier/determinism.d.ts +17 -0
- package/dist/verifier/determinism.d.ts.map +1 -0
- package/dist/verifier/determinism.js +301 -0
- package/dist/verifier/determinism.js.map +1 -0
- package/dist/verifier/properties.d.ts +6 -0
- package/dist/verifier/properties.d.ts.map +1 -0
- package/dist/verifier/properties.js +404 -0
- package/dist/verifier/properties.js.map +1 -0
- package/dist/verifier/structural.d.ts +50 -0
- package/dist/verifier/structural.d.ts.map +1 -0
- package/dist/verifier/structural.js +692 -0
- package/dist/verifier/structural.js.map +1 -0
- package/dist/verifier/types.d.ts +40 -0
- package/dist/verifier/types.d.ts.map +1 -0
- package/dist/verifier/types.js +2 -0
- package/dist/verifier/types.js.map +1 -0
- package/package.json +49 -0
- package/src/auth/index.ts +5 -0
- package/src/auth/lock.ts +71 -0
- package/src/auth/providers/anthropic.ts +192 -0
- package/src/auth/providers/index.ts +17 -0
- package/src/auth/providers/minimax.ts +100 -0
- package/src/auth/refresh.ts +138 -0
- package/src/auth/store.ts +75 -0
- package/src/auth/types.ts +62 -0
- package/src/compiler/mermaid.ts +109 -0
- package/src/compiler/xstate.ts +615 -0
- package/src/config/index.ts +2 -0
- package/src/config/loader.ts +122 -0
- package/src/config/types.ts +21 -0
- package/src/generators/index.ts +6 -0
- package/src/generators/registry.ts +27 -0
- package/src/generators/typescript.ts +67 -0
- package/src/index.ts +671 -0
- package/src/llm/anthropic.ts +102 -0
- package/src/llm/grok.ts +73 -0
- package/src/llm/index.ts +29 -0
- package/src/llm/ollama.ts +62 -0
- package/src/llm/openai.ts +74 -0
- package/src/llm/provider.ts +35 -0
- package/src/parser/ast-to-markdown.ts +220 -0
- package/src/parser/ast.ts +236 -0
- package/src/parser/markdown-parser.ts +844 -0
- package/src/runtime/effects.ts +48 -0
- package/src/runtime/machine.ts +201 -0
- package/src/runtime/types.ts +44 -0
- package/src/skills.ts +1339 -0
- package/src/tools.ts +144 -0
- package/src/verifier/completeness.ts +89 -0
- package/src/verifier/determinism.ts +328 -0
- package/src/verifier/properties.ts +507 -0
- package/src/verifier/structural.ts +803 -0
- package/src/verifier/types.ts +45 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
const MINIMAX_AUTH_URL = 'https://api.minimaxi.chat/oauth/authorize';
|
|
2
|
+
const MINIMAX_TOKEN_URL = 'https://api.minimaxi.chat/oauth/token';
|
|
3
|
+
export const minimaxOAuthProvider = 'minimax';
|
|
4
|
+
export async function exchangeCodeForTokens(code, clientId, clientSecret, redirectUri) {
|
|
5
|
+
const response = await fetch(MINIMAX_TOKEN_URL, {
|
|
6
|
+
method: 'POST',
|
|
7
|
+
headers: {
|
|
8
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
9
|
+
},
|
|
10
|
+
body: new URLSearchParams({
|
|
11
|
+
grant_type: 'authorization_code',
|
|
12
|
+
code,
|
|
13
|
+
client_id: clientId,
|
|
14
|
+
client_secret: clientSecret,
|
|
15
|
+
redirect_uri: redirectUri,
|
|
16
|
+
}),
|
|
17
|
+
});
|
|
18
|
+
if (!response.ok) {
|
|
19
|
+
const error = await response.json();
|
|
20
|
+
throw new Error(`Token exchange failed: ${error.error_description ?? error.error}`);
|
|
21
|
+
}
|
|
22
|
+
const data = await response.json();
|
|
23
|
+
return {
|
|
24
|
+
access: data.access_token,
|
|
25
|
+
refresh: data.refresh_token,
|
|
26
|
+
expires: Date.now() + data.expires_in * 1000,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export async function refreshAccessToken(refreshToken, clientId, clientSecret) {
|
|
30
|
+
const response = await fetch(MINIMAX_TOKEN_URL, {
|
|
31
|
+
method: 'POST',
|
|
32
|
+
headers: {
|
|
33
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
34
|
+
},
|
|
35
|
+
body: new URLSearchParams({
|
|
36
|
+
grant_type: 'refresh_token',
|
|
37
|
+
refresh_token: refreshToken,
|
|
38
|
+
client_id: clientId,
|
|
39
|
+
client_secret: clientSecret,
|
|
40
|
+
}),
|
|
41
|
+
});
|
|
42
|
+
if (!response.ok) {
|
|
43
|
+
const error = await response.json();
|
|
44
|
+
throw new Error(`Token refresh failed: ${error.error_description ?? error.error}`);
|
|
45
|
+
}
|
|
46
|
+
const data = await response.json();
|
|
47
|
+
return {
|
|
48
|
+
access: data.access_token,
|
|
49
|
+
refresh: data.refresh_token,
|
|
50
|
+
expires: Date.now() + data.expires_in * 1000,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export function buildAuthorizationUrl(clientId, redirectUri, state) {
|
|
54
|
+
const params = new URLSearchParams({
|
|
55
|
+
client_id: clientId,
|
|
56
|
+
response_type: 'code',
|
|
57
|
+
redirect_uri: redirectUri,
|
|
58
|
+
scope: 'full_access',
|
|
59
|
+
});
|
|
60
|
+
if (state) {
|
|
61
|
+
params.set('state', state);
|
|
62
|
+
}
|
|
63
|
+
return `${MINIMAX_AUTH_URL}?${params.toString()}`;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=minimax.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"minimax.js","sourceRoot":"","sources":["../../../src/auth/providers/minimax.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAG,2CAA2C,CAAC;AACrE,MAAM,iBAAiB,GAAG,uCAAuC,CAAC;AAElE,MAAM,CAAC,MAAM,oBAAoB,GAAkB,SAAS,CAAC;AAW7D,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAY,EACZ,QAAgB,EAChB,YAAoB,EACpB,WAAmB;IAEnB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,iBAAiB,EAAE;QAC9C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,mCAAmC;SACpD;QACD,IAAI,EAAE,IAAI,eAAe,CAAC;YACxB,UAAU,EAAE,oBAAoB;YAChC,IAAI;YACJ,SAAS,EAAE,QAAQ;YACnB,aAAa,EAAE,YAAY;YAC3B,YAAY,EAAE,WAAW;SAC1B,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA0B,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA0B,CAAC;IAE3D,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,YAAY;QACzB,OAAO,EAAE,IAAI,CAAC,aAAa;QAC3B,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI;KAC7C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,YAAoB,EACpB,QAAgB,EAChB,YAAoB;IAEpB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,iBAAiB,EAAE;QAC9C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,mCAAmC;SACpD;QACD,IAAI,EAAE,IAAI,eAAe,CAAC;YACxB,UAAU,EAAE,eAAe;YAC3B,aAAa,EAAE,YAAY;YAC3B,SAAS,EAAE,QAAQ;YACnB,aAAa,EAAE,YAAY;SAC5B,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA0B,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA0B,CAAC;IAE3D,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,YAAY;QACzB,OAAO,EAAE,IAAI,CAAC,aAAa;QAC3B,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI;KAC7C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,QAAgB,EAChB,WAAmB,EACnB,KAAc;IAEd,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,SAAS,EAAE,QAAQ;QACnB,aAAa,EAAE,MAAM;QACrB,YAAY,EAAE,WAAW;QACzB,KAAK,EAAE,aAAa;KACrB,CAAC,CAAC;IAEH,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,GAAG,gBAAgB,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AuthProfile, OAuthCredential } from './types.js';
|
|
2
|
+
export declare function refreshOAuthCredential(profileId: string, profile: AuthProfile): Promise<OAuthCredential>;
|
|
3
|
+
export declare function getValidAccessToken(profileId: string): Promise<{
|
|
4
|
+
apiKey: string;
|
|
5
|
+
provider: string;
|
|
6
|
+
email?: string;
|
|
7
|
+
} | null>;
|
|
8
|
+
//# sourceMappingURL=refresh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../src/auth/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAsB,MAAM,YAAY,CAAC;AAkB9E,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC,CAqE1B;AAED,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA2CtE"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { getAuthProfile, setAuthProfile } from './store.js';
|
|
2
|
+
import { withFileLock } from './lock.js';
|
|
3
|
+
import { refreshAccessToken as anthropicRefresh, anthropicOAuthProvider, } from './providers/anthropic.js';
|
|
4
|
+
import { refreshAccessToken as minimaxRefresh, minimaxOAuthProvider, } from './providers/minimax.js';
|
|
5
|
+
const REFRESH_THRESHOLD_MS = 5 * 60 * 1000; // 5 minutes before expiry
|
|
6
|
+
function isExpired(expires) {
|
|
7
|
+
return Date.now() >= expires - REFRESH_THRESHOLD_MS;
|
|
8
|
+
}
|
|
9
|
+
export async function refreshOAuthCredential(profileId, profile) {
|
|
10
|
+
if (profile.mode !== 'oauth') {
|
|
11
|
+
throw new Error('Profile is not an OAuth credential');
|
|
12
|
+
}
|
|
13
|
+
if (!profile.refresh) {
|
|
14
|
+
throw new Error('No refresh token available');
|
|
15
|
+
}
|
|
16
|
+
// Use file lock to prevent concurrent refresh attempts
|
|
17
|
+
const result = await withFileLock(`oauth:${profileId}`, async () => {
|
|
18
|
+
// Re-read profile in case it was updated by another process
|
|
19
|
+
const currentProfile = getAuthProfile(profileId);
|
|
20
|
+
if (!currentProfile || currentProfile.mode !== 'oauth') {
|
|
21
|
+
throw new Error('Profile not found or not OAuth');
|
|
22
|
+
}
|
|
23
|
+
// Check if token is still valid
|
|
24
|
+
if (currentProfile.expires && !isExpired(currentProfile.expires)) {
|
|
25
|
+
return {
|
|
26
|
+
access: currentProfile.access,
|
|
27
|
+
refresh: currentProfile.refresh,
|
|
28
|
+
expires: currentProfile.expires,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
// Refresh the token based on provider
|
|
32
|
+
let refreshResult;
|
|
33
|
+
if (currentProfile.provider === anthropicOAuthProvider) {
|
|
34
|
+
// For Anthropic, we need client credentials
|
|
35
|
+
// In a full implementation, these would be stored securely
|
|
36
|
+
// For now, we'll use a simplified approach
|
|
37
|
+
refreshResult = await anthropicRefresh(currentProfile.refresh, 'orca-cli', // Would be the actual client ID
|
|
38
|
+
'' // Would be the actual client secret
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
else if (currentProfile.provider === minimaxOAuthProvider) {
|
|
42
|
+
refreshResult = await minimaxRefresh(currentProfile.refresh, 'orca-cli', '');
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
throw new Error(`Unsupported OAuth provider: ${currentProfile.provider}`);
|
|
46
|
+
}
|
|
47
|
+
// Update profile with new credentials
|
|
48
|
+
const updatedProfile = {
|
|
49
|
+
...currentProfile,
|
|
50
|
+
access: refreshResult.access,
|
|
51
|
+
refresh: refreshResult.refresh ?? currentProfile.refresh,
|
|
52
|
+
expires: refreshResult.expires,
|
|
53
|
+
};
|
|
54
|
+
setAuthProfile(profileId, updatedProfile);
|
|
55
|
+
return refreshResult;
|
|
56
|
+
});
|
|
57
|
+
return {
|
|
58
|
+
type: 'oauth',
|
|
59
|
+
provider: profile.provider,
|
|
60
|
+
access: result.access,
|
|
61
|
+
refresh: result.refresh ?? profile.refresh,
|
|
62
|
+
expires: result.expires,
|
|
63
|
+
email: profile.email,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export async function getValidAccessToken(profileId) {
|
|
67
|
+
const profile = getAuthProfile(profileId);
|
|
68
|
+
if (!profile) {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
if (profile.mode === 'api_key') {
|
|
72
|
+
return {
|
|
73
|
+
apiKey: profile.key ?? '',
|
|
74
|
+
provider: profile.provider,
|
|
75
|
+
email: profile.email,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
if (profile.mode === 'oauth') {
|
|
79
|
+
// Check if we need to refresh
|
|
80
|
+
if (profile.expires && !isExpired(profile.expires)) {
|
|
81
|
+
return {
|
|
82
|
+
apiKey: profile.access ?? '',
|
|
83
|
+
provider: profile.provider,
|
|
84
|
+
email: profile.email,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// Refresh and return new token
|
|
88
|
+
const refreshed = await refreshOAuthCredential(profileId, profile);
|
|
89
|
+
return {
|
|
90
|
+
apiKey: refreshed.access,
|
|
91
|
+
provider: refreshed.provider,
|
|
92
|
+
email: refreshed.email,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
if (profile.mode === 'token') {
|
|
96
|
+
return {
|
|
97
|
+
apiKey: profile.token ?? '',
|
|
98
|
+
provider: profile.provider,
|
|
99
|
+
email: profile.email,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=refresh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../src/auth/refresh.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AuthProfileStore, AuthProfile } from './types.js';
|
|
2
|
+
export declare function getOrcaDir(): string;
|
|
3
|
+
export declare function getAuthStorePath(): string;
|
|
4
|
+
export declare function ensureOrcaDir(): void;
|
|
5
|
+
export declare function loadAuthStore(): AuthProfileStore;
|
|
6
|
+
export declare function saveAuthStore(store: AuthProfileStore): void;
|
|
7
|
+
export declare function getAuthProfile(profileId: string): AuthProfile | null;
|
|
8
|
+
export declare function setAuthProfile(profileId: string, profile: AuthProfile): void;
|
|
9
|
+
export declare function deleteAuthProfile(profileId: string): boolean;
|
|
10
|
+
export declare function listAuthProfiles(): string[];
|
|
11
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/auth/store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI3D,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED,wBAAgB,aAAa,IAAI,gBAAgB,CAkBhD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAM3D;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAGpE;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAI5E;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAQ5D;AAED,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAG3C"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { homedir } from 'os';
|
|
4
|
+
const STORE_VERSION = 1;
|
|
5
|
+
export function getOrcaDir() {
|
|
6
|
+
return join(homedir(), '.orca');
|
|
7
|
+
}
|
|
8
|
+
export function getAuthStorePath() {
|
|
9
|
+
return join(getOrcaDir(), 'auth_profiles.json');
|
|
10
|
+
}
|
|
11
|
+
export function ensureOrcaDir() {
|
|
12
|
+
const dir = getOrcaDir();
|
|
13
|
+
if (!existsSync(dir)) {
|
|
14
|
+
mkdirSync(dir, { mode: 0o700, recursive: true });
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function loadAuthStore() {
|
|
18
|
+
const path = getAuthStorePath();
|
|
19
|
+
ensureOrcaDir();
|
|
20
|
+
if (!existsSync(path)) {
|
|
21
|
+
return { version: STORE_VERSION, profiles: {} };
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const content = readFileSync(path, 'utf-8');
|
|
25
|
+
const store = JSON.parse(content);
|
|
26
|
+
return {
|
|
27
|
+
version: store.version ?? STORE_VERSION,
|
|
28
|
+
profiles: store.profiles ?? {},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return { version: STORE_VERSION, profiles: {} };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export function saveAuthStore(store) {
|
|
36
|
+
const path = getAuthStorePath();
|
|
37
|
+
ensureOrcaDir();
|
|
38
|
+
// Set restrictive permissions (owner read/write only)
|
|
39
|
+
writeFileSync(path, JSON.stringify(store, null, 2), { mode: 0o600 });
|
|
40
|
+
}
|
|
41
|
+
export function getAuthProfile(profileId) {
|
|
42
|
+
const store = loadAuthStore();
|
|
43
|
+
return store.profiles[profileId] ?? null;
|
|
44
|
+
}
|
|
45
|
+
export function setAuthProfile(profileId, profile) {
|
|
46
|
+
const store = loadAuthStore();
|
|
47
|
+
store.profiles[profileId] = profile;
|
|
48
|
+
saveAuthStore(store);
|
|
49
|
+
}
|
|
50
|
+
export function deleteAuthProfile(profileId) {
|
|
51
|
+
const store = loadAuthStore();
|
|
52
|
+
if (store.profiles[profileId]) {
|
|
53
|
+
delete store.profiles[profileId];
|
|
54
|
+
saveAuthStore(store);
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
export function listAuthProfiles() {
|
|
60
|
+
const store = loadAuthStore();
|
|
61
|
+
return Object.keys(store.profiles);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/auth/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export type AuthMode = 'api_key' | 'oauth' | 'token';
|
|
2
|
+
export interface ApiKeyCredential {
|
|
3
|
+
type: 'api_key';
|
|
4
|
+
provider: string;
|
|
5
|
+
key: string;
|
|
6
|
+
email?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface OAuthCredential {
|
|
9
|
+
type: 'oauth';
|
|
10
|
+
provider: string;
|
|
11
|
+
access: string;
|
|
12
|
+
refresh: string;
|
|
13
|
+
expires: number;
|
|
14
|
+
email?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface TokenCredential {
|
|
17
|
+
type: 'token';
|
|
18
|
+
provider: string;
|
|
19
|
+
token: string;
|
|
20
|
+
expires?: number;
|
|
21
|
+
email?: string;
|
|
22
|
+
}
|
|
23
|
+
export type AuthCredential = ApiKeyCredential | OAuthCredential | TokenCredential;
|
|
24
|
+
export interface AuthProfile {
|
|
25
|
+
mode: AuthMode;
|
|
26
|
+
provider: string;
|
|
27
|
+
email?: string;
|
|
28
|
+
key?: string;
|
|
29
|
+
keyRef?: string;
|
|
30
|
+
token?: string;
|
|
31
|
+
tokenRef?: string;
|
|
32
|
+
access?: string;
|
|
33
|
+
refresh?: string;
|
|
34
|
+
expires?: number;
|
|
35
|
+
}
|
|
36
|
+
export interface AuthProfileStore {
|
|
37
|
+
version: number;
|
|
38
|
+
profiles: Record<string, AuthProfile>;
|
|
39
|
+
}
|
|
40
|
+
export interface AuthProfileResult {
|
|
41
|
+
apiKey: string;
|
|
42
|
+
provider: string;
|
|
43
|
+
email?: string;
|
|
44
|
+
}
|
|
45
|
+
export type OAuthProvider = 'anthropic' | 'minimax';
|
|
46
|
+
export interface TokenRefreshResult {
|
|
47
|
+
access: string;
|
|
48
|
+
refresh?: string;
|
|
49
|
+
expires: number;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,eAAe,GAAG,eAAe,CAAC;AAElF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,SAAS,CAAC;AAEpD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mermaid.d.ts","sourceRoot":"","sources":["../../src/compiler/mermaid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAY,MAAM,kBAAkB,CAAC;AAExD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAqC5D"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
export function compileToMermaid(machine) {
|
|
2
|
+
const lines = [];
|
|
3
|
+
lines.push(`stateDiagram-v2`);
|
|
4
|
+
lines.push(` direction LR`);
|
|
5
|
+
lines.push(``);
|
|
6
|
+
// Add initial state transition
|
|
7
|
+
lines.push(` [*] --> ${getInitialStateName(machine)}`);
|
|
8
|
+
// Add termination transitions for top-level final states
|
|
9
|
+
for (const state of machine.states) {
|
|
10
|
+
if (state.isFinal) {
|
|
11
|
+
lines.push(` ${state.name} --> [*]`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
lines.push(``);
|
|
15
|
+
// Render compound/parallel state bodies
|
|
16
|
+
for (const state of machine.states) {
|
|
17
|
+
renderStateBody(state, machine, lines, ' ');
|
|
18
|
+
}
|
|
19
|
+
// Add transitions
|
|
20
|
+
for (const t of machine.transitions) {
|
|
21
|
+
let label = t.event;
|
|
22
|
+
if (t.guard) {
|
|
23
|
+
label += ` [${t.guard.negated ? '!' : ''}${t.guard.name}]`;
|
|
24
|
+
}
|
|
25
|
+
if (t.action && t.action !== '_') {
|
|
26
|
+
label += ` / ${t.action}`;
|
|
27
|
+
}
|
|
28
|
+
lines.push(` ${t.source} --> ${t.target} : ${label}`);
|
|
29
|
+
}
|
|
30
|
+
return lines.join('\n');
|
|
31
|
+
}
|
|
32
|
+
function renderStateBody(state, machine, lines, indent) {
|
|
33
|
+
// Hierarchical compound states
|
|
34
|
+
if (state.contains && state.contains.length > 0) {
|
|
35
|
+
lines.push(`${indent}state ${state.name} {`);
|
|
36
|
+
const inner = indent + ' ';
|
|
37
|
+
// Initial child transition
|
|
38
|
+
const initialChild = state.contains.find(s => s.isInitial) || state.contains[0];
|
|
39
|
+
lines.push(`${inner}[*] --> ${initialChild.name}`);
|
|
40
|
+
// Final child transitions
|
|
41
|
+
for (const child of state.contains) {
|
|
42
|
+
if (child.isFinal) {
|
|
43
|
+
lines.push(`${inner}${child.name} --> [*]`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Recurse into children that are themselves compound/parallel
|
|
47
|
+
for (const child of state.contains) {
|
|
48
|
+
renderStateBody(child, machine, lines, inner);
|
|
49
|
+
}
|
|
50
|
+
lines.push(`${indent}}`);
|
|
51
|
+
}
|
|
52
|
+
// Parallel states
|
|
53
|
+
if (state.parallel) {
|
|
54
|
+
lines.push(`${indent}state ${state.name} {`);
|
|
55
|
+
const inner = indent + ' ';
|
|
56
|
+
for (let i = 0; i < state.parallel.regions.length; i++) {
|
|
57
|
+
const region = state.parallel.regions[i];
|
|
58
|
+
// Region separator between regions
|
|
59
|
+
if (i > 0) {
|
|
60
|
+
lines.push(`${inner}--`);
|
|
61
|
+
}
|
|
62
|
+
lines.push(`${inner}state ${region.name} {`);
|
|
63
|
+
const regionInner = inner + ' ';
|
|
64
|
+
// Initial child transition within region
|
|
65
|
+
const initialChild = region.states.find(s => s.isInitial) || region.states[0];
|
|
66
|
+
lines.push(`${regionInner}[*] --> ${initialChild.name}`);
|
|
67
|
+
// Final child transitions within region
|
|
68
|
+
for (const child of region.states) {
|
|
69
|
+
if (child.isFinal) {
|
|
70
|
+
lines.push(`${regionInner}${child.name} --> [*]`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Recurse into children
|
|
74
|
+
for (const child of region.states) {
|
|
75
|
+
renderStateBody(child, machine, lines, regionInner);
|
|
76
|
+
}
|
|
77
|
+
lines.push(`${inner}}`);
|
|
78
|
+
}
|
|
79
|
+
lines.push(`${indent}}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function getInitialStateName(machine) {
|
|
83
|
+
const initial = machine.states.find(s => s.isInitial);
|
|
84
|
+
return initial?.name || machine.states[0]?.name || 'unknown';
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=mermaid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mermaid.js","sourceRoot":"","sources":["../../src/compiler/mermaid.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { MachineDef } from '../parser/ast.js';
|
|
2
|
+
export interface CompiledMachine {
|
|
3
|
+
config: any;
|
|
4
|
+
effectMeta: {
|
|
5
|
+
effectfulActions: Array<{
|
|
6
|
+
name: string;
|
|
7
|
+
effectType: string;
|
|
8
|
+
state: string;
|
|
9
|
+
transition?: string;
|
|
10
|
+
}>;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export declare function compileToXStateMachine(machine: MachineDef): CompiledMachine;
|
|
14
|
+
export declare function compileToXState(machine: MachineDef): string;
|
|
15
|
+
//# sourceMappingURL=xstate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xstate.d.ts","sourceRoot":"","sources":["../../src/compiler/xstate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAyC,MAAM,kBAAkB,CAAC;AAiCrF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,GAAG,CAAC;IACZ,UAAU,EAAE;QACV,gBAAgB,EAAE,KAAK,CAAC;YACtB,IAAI,EAAE,MAAM,CAAC;YACb,UAAU,EAAE,MAAM,CAAC;YACnB,KAAK,EAAE,MAAM,CAAC;YACd,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;KACJ,CAAC;CACH;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,UAAU,GAAG,eAAe,CAiB3E;AAgUD,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAiL3D"}
|