@notis_ai/cli 0.2.0-beta.16.1 → 0.2.0-beta.160.1
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 +433 -133
- package/config/notis_app_boundary_rules.json +50 -0
- package/config/notis_app_design_rules.json +135 -0
- package/dist/agent-hooks/notis-agent-hook.mjs +18672 -0
- package/dist/base-skills/notis-apps/SKILL.md +70 -0
- package/dist/base-skills/notis-apps/references/architecture.md +164 -0
- package/dist/base-skills/notis-apps/references/context.md +81 -0
- package/dist/base-skills/notis-apps/references/design.md +165 -0
- package/dist/base-skills/notis-apps/references/reading.md +89 -0
- package/dist/base-skills/notis-apps/references/release.md +99 -0
- package/dist/base-skills/notis-apps/references/sdk.md +62 -0
- package/dist/base-skills/notis-apps/references/troubleshooting.md +23 -0
- package/dist/base-skills/notis-cli/SKILL.md +140 -0
- package/dist/base-skills/notis-cli/references/app-delivery.md +18 -0
- package/dist/base-skills/notis-cli/references/native-databases.md +20 -0
- package/dist/base-skills/notis-cli/references/tool-examples.md +56 -0
- package/dist/base-skills/notis-cli/references/troubleshooting.md +39 -0
- package/dist/base-skills/notis-query/SKILL.md +67 -0
- package/dist/base-skills/notis-query/references/database-discovery.md +59 -0
- package/dist/base-skills/notis-query/references/documents.md +50 -0
- package/dist/base-skills/notis-query/references/query.md +543 -0
- package/dist/skill-sync/index.js +1626 -0
- package/dist/skill-sync/index.js.map +7 -0
- package/dist/skill-sync-worker.mjs +2990 -0
- package/package.json +16 -6
- package/skills/notis-apps/cli.md +313 -0
- package/skills/notis-cli/AGENT_INSTRUCTIONS.md +39 -0
- package/skills/notis-onboarding/BRIEF.md +129 -0
- package/skills/notis-query/cli.md +39 -0
- package/src/agent-hook-entry.js +5 -0
- package/src/cli.js +294 -25
- package/src/command-specs/agents.js +392 -0
- package/src/command-specs/apps.js +1470 -202
- package/src/command-specs/auth.js +114 -137
- package/src/command-specs/diagnostics.js +716 -0
- package/src/command-specs/handover.js +374 -0
- package/src/command-specs/helpers.js +84 -82
- package/src/command-specs/index.js +25 -6
- package/src/command-specs/meta.js +150 -18
- package/src/command-specs/onboarding.js +290 -0
- package/src/command-specs/profile.js +358 -0
- package/src/command-specs/reports.js +86 -0
- package/src/command-specs/skills.js +75 -0
- package/src/command-specs/smoke.js +386 -0
- package/src/command-specs/tools.js +455 -139
- package/src/runtime/agent-browser.js +632 -0
- package/src/runtime/agent-memory-state.js +126 -0
- package/src/runtime/agent-setup.js +383 -0
- package/src/runtime/app-boundary-validator.js +404 -0
- package/src/runtime/app-changelog.js +79 -0
- package/src/runtime/app-platform.js +2633 -210
- package/src/runtime/app-registry-scaffolds.js +367 -0
- package/src/runtime/app-test-server.js +292 -0
- package/src/runtime/assets/store-screenshot-dark.png +0 -0
- package/src/runtime/auth-recovery.js +110 -0
- package/src/runtime/base-skills.d.ts +20 -0
- package/src/runtime/base-skills.js +167 -0
- package/src/runtime/channel.js +133 -0
- package/src/runtime/delegated-context.js +68 -0
- package/src/runtime/errors.js +1 -0
- package/src/runtime/git.js +233 -0
- package/src/runtime/login-listener.js +15 -0
- package/src/runtime/oauth.js +2622 -0
- package/src/runtime/output.js +37 -5
- package/src/runtime/ports.js +31 -0
- package/src/runtime/profiles.js +906 -55
- package/src/runtime/skill-sync/cloud-client.ts +99 -0
- package/src/runtime/skill-sync/index.ts +697 -0
- package/src/runtime/skill-sync/local-scanner.ts +1046 -0
- package/src/runtime/skill-sync/symlink-manager.ts +433 -0
- package/src/runtime/skill-sync/sync-plan.ts +22 -0
- package/src/runtime/skill-sync/types.ts +110 -0
- package/src/runtime/skill-sync/write-cloud-skill.ts +50 -0
- package/src/runtime/skill-sync-service.js +109 -0
- package/src/runtime/store-screenshot.js +143 -0
- package/src/runtime/sync-skills.d.ts +37 -0
- package/src/runtime/sync-skills.js +231 -0
- package/src/runtime/telemetry.js +92 -0
- package/src/runtime/transport.js +324 -45
- package/src/skill-sync-worker-entry.js +2 -0
- package/src/skill-sync-worker.js +50 -0
- package/template/.harness/index.html.tmpl +430 -0
- package/template/CHANGELOG.md +5 -0
- package/template/app/layout.tsx +5 -2
- package/template/app/page.tsx +49 -42
- package/template/components/page-heading.tsx +23 -0
- package/template/components/ui/badge.tsx +7 -4
- package/template/components/ui/card.tsx +24 -11
- package/template/components/ui/native-select.tsx +24 -0
- package/template/notis.config.ts +24 -6
- package/template/package-lock.json +4137 -0
- package/template/package.json +5 -5
- package/template/packages/{notis-sdk → sdk}/package.json +13 -3
- package/template/packages/sdk/src/agentContext.ts +36 -0
- package/template/packages/sdk/src/components/DocumentEditor.tsx +103 -0
- package/template/packages/sdk/src/components/Markdown.tsx +60 -0
- package/template/packages/sdk/src/components/MarkdownEditor.tsx +121 -0
- package/template/packages/sdk/src/components/MultiSelectActionBar.tsx +285 -0
- package/template/packages/sdk/src/components/MultiSelectCheckbox.tsx +97 -0
- package/template/packages/sdk/src/components/MultiSelectDragOverlay.tsx +39 -0
- package/template/packages/sdk/src/components/NotisCommentBoundary.tsx +172 -0
- package/template/packages/sdk/src/components/NotisSelectionBoundary.tsx +59 -0
- package/template/packages/sdk/src/components/ShortcutHints.tsx +56 -0
- package/template/packages/sdk/src/components/Skeleton.tsx +24 -0
- package/template/packages/sdk/src/config.ts +257 -0
- package/template/packages/sdk/src/documents.ts +256 -0
- package/template/packages/sdk/src/hooks/useActiveResource.ts +19 -0
- package/template/packages/sdk/src/hooks/useAgentContext.ts +23 -0
- package/template/packages/sdk/src/hooks/useCloudComputer.ts +64 -0
- package/template/packages/sdk/src/hooks/useCollectionInteractions.ts +836 -0
- package/template/packages/sdk/src/hooks/useDatabaseSchema.ts +49 -0
- package/template/packages/sdk/src/hooks/useDatabaseSubscription.ts +76 -0
- package/template/packages/sdk/src/hooks/useDocument.ts +43 -0
- package/template/packages/sdk/src/hooks/useDocuments.ts +84 -0
- package/template/packages/sdk/src/hooks/useHandover.ts +78 -0
- package/template/packages/sdk/src/hooks/useLongPressSelection.ts +79 -0
- package/template/packages/sdk/src/hooks/useMultiSelect.ts +95 -0
- package/template/packages/{notis-sdk → sdk}/src/hooks/useNotis.ts +10 -4
- package/template/packages/{notis-sdk → sdk}/src/hooks/useNotisNavigation.ts +11 -8
- package/template/packages/sdk/src/hooks/useQuery.ts +71 -0
- package/template/packages/sdk/src/hooks/useTool.ts +65 -0
- package/template/packages/sdk/src/hooks/useToolQuery.ts +12 -0
- package/template/packages/sdk/src/hooks/useTopBarSearch.ts +81 -0
- package/template/packages/sdk/src/hooks/useUpsertDocument.ts +95 -0
- package/template/packages/sdk/src/index.ts +161 -0
- package/template/packages/sdk/src/interactions/actions.ts +59 -0
- package/template/packages/sdk/src/interactions/shortcuts.tsx +694 -0
- package/template/packages/sdk/src/interactions/visibility.ts +13 -0
- package/template/packages/sdk/src/interactions.ts +45 -0
- package/template/packages/sdk/src/provider.tsx +44 -0
- package/template/packages/sdk/src/queryCache.ts +170 -0
- package/template/packages/sdk/src/runtime.ts +451 -0
- package/template/packages/sdk/src/styles.css +213 -0
- package/template/packages/sdk/src/tailwind.ts +56 -0
- package/template/packages/{notis-sdk → sdk}/src/vite.ts +5 -1
- package/template/tailwind.config.ts +1 -0
- package/src/command-specs/db.js +0 -163
- package/src/runtime/app-preview-server.js +0 -312
- package/template/packages/notis-sdk/src/config.ts +0 -48
- package/template/packages/notis-sdk/src/helpers.ts +0 -131
- package/template/packages/notis-sdk/src/hooks/useAppState.ts +0 -50
- package/template/packages/notis-sdk/src/hooks/useCollectionItem.ts +0 -58
- package/template/packages/notis-sdk/src/hooks/useDatabase.ts +0 -87
- package/template/packages/notis-sdk/src/hooks/useDocument.ts +0 -61
- package/template/packages/notis-sdk/src/hooks/useTool.ts +0 -49
- package/template/packages/notis-sdk/src/hooks/useUpsertDocument.ts +0 -57
- package/template/packages/notis-sdk/src/index.ts +0 -47
- package/template/packages/notis-sdk/src/provider.tsx +0 -44
- package/template/packages/notis-sdk/src/runtime.ts +0 -159
- package/template/packages/notis-sdk/src/styles.css +0 -123
- /package/template/packages/{notis-sdk → sdk}/src/hooks/useBackend.ts +0 -0
- /package/template/packages/{notis-sdk → sdk}/src/hooks/useTools.ts +0 -0
- /package/template/packages/{notis-sdk → sdk}/src/ui.ts +0 -0
- /package/template/packages/{notis-sdk → sdk}/tsconfig.json +0 -0
|
@@ -1,178 +1,155 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
clearStoredJwt,
|
|
4
|
-
probeAuth,
|
|
5
|
-
promptForJwt,
|
|
6
|
-
updateStoredProfile,
|
|
7
|
-
} from './helpers.js';
|
|
1
|
+
import { loginWithOAuth, logoutOAuth } from '../runtime/oauth.js';
|
|
2
|
+
import { installLocalAgentContext } from './agents.js';
|
|
8
3
|
|
|
9
|
-
async function
|
|
10
|
-
|
|
11
|
-
if (
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
4
|
+
async function loginHandler(ctx) {
|
|
5
|
+
const result = await loginWithOAuth(ctx.runtime, ctx.options, ctx.output);
|
|
6
|
+
if (result.agentAuthorization) {
|
|
7
|
+
const presentation = loginAgentAuthorizationPresentation(result.agentAuthorization);
|
|
8
|
+
return ctx.output.emitSuccess({
|
|
9
|
+
command: 'login',
|
|
10
|
+
data: result.agentAuthorization,
|
|
11
|
+
...presentation,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
let agentSetup = [];
|
|
15
|
+
const setupWarnings = [];
|
|
16
|
+
try {
|
|
17
|
+
// Login may add static CLI guidance, but automatic capture is a separate
|
|
18
|
+
// explicit choice made through `notis agents install`.
|
|
19
|
+
agentSetup = installLocalAgentContext(ctx, {
|
|
20
|
+
onlyExisting: true,
|
|
21
|
+
memoryHooks: null,
|
|
22
|
+
});
|
|
23
|
+
} catch (error) {
|
|
24
|
+
setupWarnings.push(`Notis CLI login succeeded, but local agent context setup failed: ${error.message}`);
|
|
26
25
|
}
|
|
27
|
-
|
|
28
|
-
updateStoredProfile({
|
|
29
|
-
profileName: ctx.runtime.profileName,
|
|
30
|
-
jwt,
|
|
31
|
-
apiBase: ctx.globalOptions.apiBase,
|
|
32
|
-
setCurrent: true,
|
|
33
|
-
});
|
|
34
|
-
|
|
35
26
|
return ctx.output.emitSuccess({
|
|
36
|
-
command:
|
|
27
|
+
command: 'login',
|
|
37
28
|
data: {
|
|
29
|
+
authenticated: true,
|
|
30
|
+
credential_source: 'oauth',
|
|
38
31
|
profile: ctx.runtime.profileName,
|
|
39
|
-
api_base:
|
|
32
|
+
api_base: result.profile.api_base || ctx.runtime.apiBase,
|
|
33
|
+
user_id: result.profile.oauth_user_id,
|
|
34
|
+
scopes: result.profile.oauth_scopes,
|
|
35
|
+
access_expires_at: result.profile.oauth_access_expires_at,
|
|
36
|
+
refresh_expires_at: result.profile.oauth_refresh_expires_at,
|
|
37
|
+
agent_setup: agentSetup,
|
|
40
38
|
},
|
|
41
|
-
humanSummary: `
|
|
39
|
+
humanSummary: `Notis CLI is authorized for profile "${ctx.runtime.profileName}".`,
|
|
40
|
+
warnings: setupWarnings,
|
|
42
41
|
hints: [
|
|
43
|
-
{ command: 'notis
|
|
42
|
+
{ command: 'notis profile list', reason: 'See every account this machine can switch between' },
|
|
43
|
+
{ command: 'notis agents install', reason: 'Install or refresh Notis context for Codex and Claude Code' },
|
|
44
44
|
],
|
|
45
|
-
meta: { mutating: true },
|
|
46
45
|
});
|
|
47
46
|
}
|
|
48
47
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
48
|
+
export function loginAgentAuthorizationPresentation(authorization) {
|
|
49
|
+
const browserHandOff = authorization?.hand_off === 'browser_callback';
|
|
50
|
+
const nextCommand = browserHandOff
|
|
51
|
+
? authorization?.confirm_command
|
|
52
|
+
: authorization?.redeem_command;
|
|
53
|
+
return {
|
|
54
|
+
humanSummary: browserHandOff
|
|
55
|
+
? 'Give the user the authorization URL. Signing in there completes it — there is no code to ask them for.'
|
|
56
|
+
: 'Give the user the authorization URL, then ask them for the code it shows.',
|
|
57
|
+
hints: nextCommand
|
|
58
|
+
? [{
|
|
59
|
+
command: nextCommand,
|
|
60
|
+
reason: browserHandOff
|
|
61
|
+
? 'Confirm the account once they have finished in the browser'
|
|
62
|
+
: 'Redeem the code shown in the browser',
|
|
63
|
+
}]
|
|
64
|
+
: [],
|
|
65
|
+
renderHuman: () => `Authorize Notis CLI: ${authorization.authorize_url}`,
|
|
66
|
+
};
|
|
57
67
|
}
|
|
58
68
|
|
|
59
|
-
async function
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
if (hasJwt && ctx.options.verify) {
|
|
64
|
-
const payload = await probeAuth(ctx.runtime);
|
|
65
|
-
toolkits = payload.toolkits || [];
|
|
66
|
-
verified = true;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
+
async function logoutHandler(ctx) {
|
|
70
|
+
const result = await logoutOAuth(ctx.runtime, {
|
|
71
|
+
allProfiles: Boolean(ctx.options.allProfiles),
|
|
72
|
+
});
|
|
69
73
|
return ctx.output.emitSuccess({
|
|
70
|
-
command:
|
|
74
|
+
command: 'logout',
|
|
71
75
|
data: {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
has_jwt: hasJwt,
|
|
75
|
-
verified,
|
|
76
|
-
toolkits,
|
|
76
|
+
oauth_connected: false,
|
|
77
|
+
cleared_profiles: result.profiles,
|
|
77
78
|
},
|
|
78
|
-
humanSummary:
|
|
79
|
-
|
|
80
|
-
:
|
|
81
|
-
|
|
82
|
-
? []
|
|
83
|
-
: [{ command: 'notis auth login --jwt <token>', reason: 'Configure credentials for this profile' }],
|
|
84
|
-
meta: { mutating: false },
|
|
79
|
+
humanSummary: logoutHumanSummary(result, {
|
|
80
|
+
allProfiles: Boolean(ctx.options.allProfiles),
|
|
81
|
+
profileName: ctx.runtime.profileName,
|
|
82
|
+
}),
|
|
85
83
|
});
|
|
86
84
|
}
|
|
87
85
|
|
|
86
|
+
export function logoutHumanSummary(result, { allProfiles, profileName }) {
|
|
87
|
+
if (allProfiles) {
|
|
88
|
+
return result.profiles.length > 0
|
|
89
|
+
? 'OAuth state was cleared from all connected or pending CLI profiles.'
|
|
90
|
+
: 'No OAuth credentials were connected in any CLI profile.';
|
|
91
|
+
}
|
|
92
|
+
return result.profiles.includes(profileName)
|
|
93
|
+
? `OAuth state was cleared for profile "${profileName}", including any pending authorization.`
|
|
94
|
+
: `No OAuth credential was connected for profile "${profileName}".`;
|
|
95
|
+
}
|
|
96
|
+
|
|
88
97
|
export const authCommandSpecs = [
|
|
89
98
|
{
|
|
90
|
-
command_path: ['
|
|
91
|
-
summary: '
|
|
92
|
-
when_to_use:
|
|
99
|
+
command_path: ['login'],
|
|
100
|
+
summary: 'Authorize a CLI profile in a browser with scoped OAuth access.',
|
|
101
|
+
when_to_use:
|
|
102
|
+
'Run this once per account you want the CLI to reach. Pass --profile to add a second account without signing the first one out.',
|
|
93
103
|
args_schema: {
|
|
94
104
|
arguments: [],
|
|
95
105
|
options: [
|
|
96
|
-
{ flags: '--
|
|
106
|
+
{ flags: '--no-browser', description: 'Print the authorization URL without opening a browser.' },
|
|
107
|
+
{ flags: '--print-url', description: 'Print the authorization URL even when opening a browser.' },
|
|
108
|
+
{ flags: '--mode <mode>', description: 'auto (default) hands the browser callback to a background listener when this command cannot wait; browser waits in-process; code shows a one-time code to copy.' },
|
|
109
|
+
{ flags: '--paste-code', description: 'Alias for --mode code.' },
|
|
110
|
+
{ flags: '--timeout-seconds <n>', description: 'Authorization lifetime in seconds (default 300 while waiting in a terminal; 1800 for detached or code hand-offs).' },
|
|
111
|
+
{ flags: '--scope <scope>', description: 'OAuth permission to request (repeatable).', collect: true },
|
|
112
|
+
{ flags: '--code <code>', description: 'Redeem the code shown in the browser after a non-interactive login.' },
|
|
97
113
|
],
|
|
98
114
|
},
|
|
99
|
-
examples: [
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
summary: 'Remove the stored JWT for the active profile.',
|
|
111
|
-
when_to_use: 'Use this to clear local credentials without touching other profiles.',
|
|
112
|
-
args_schema: { arguments: [], options: [] },
|
|
113
|
-
examples: ['notis auth logout', 'notis auth logout --profile staging'],
|
|
114
|
-
output_schema: 'Returns the profile that was updated.',
|
|
115
|
+
examples: [
|
|
116
|
+
'notis login',
|
|
117
|
+
'notis login --profile work',
|
|
118
|
+
'notis login --profile beta --api-base https://api-beta.notis.ai',
|
|
119
|
+
'notis login --no-browser --print-url',
|
|
120
|
+
'notis login --mode browser',
|
|
121
|
+
'notis login --mode code',
|
|
122
|
+
'notis login --code 4f3c2b1a',
|
|
123
|
+
],
|
|
124
|
+
output_schema:
|
|
125
|
+
'Returns credential_source, profile, api_base, user_id, scopes, and credential expiries; non-blocking agent, machine-output, or non-interactive modes return authorize_url, expires_in, and hand_off ("browser_callback" needs no code, "code" must be redeemed with redeem_command).',
|
|
115
126
|
mutates: true,
|
|
116
127
|
idempotent: true,
|
|
117
128
|
require_auth: false,
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
{
|
|
123
|
-
command_path: ['auth', 'status'],
|
|
124
|
-
summary: 'Inspect local auth configuration and optionally verify it against the API.',
|
|
125
|
-
when_to_use: 'Use this before automating commands to confirm the active profile and token health.',
|
|
126
|
-
args_schema: {
|
|
127
|
-
arguments: [],
|
|
128
|
-
options: [
|
|
129
|
-
{ flags: '--verify', description: 'Perform a live authenticated roundtrip to the API.' },
|
|
130
|
-
],
|
|
131
|
-
},
|
|
132
|
-
examples: ['notis auth status', 'notis auth status --verify --json'],
|
|
133
|
-
output_schema: 'Returns profile, api_base, local auth presence, and optional verification data.',
|
|
134
|
-
mutates: false,
|
|
135
|
-
idempotent: true,
|
|
136
|
-
require_auth: false,
|
|
137
|
-
related_commands: ['notis doctor', 'notis auth login --jwt <token>'],
|
|
138
|
-
backend_call: { type: 'notis_find_toolkits' },
|
|
139
|
-
handler: authStatusHandler,
|
|
129
|
+
allow_unknown_profile: true,
|
|
130
|
+
related_commands: ['notis profile list', 'notis profile use', 'notis logout', 'notis doctor'],
|
|
131
|
+
backend_call: { type: 'oauth', name: 'authorization_code+pkce' },
|
|
132
|
+
handler: loginHandler,
|
|
140
133
|
},
|
|
141
134
|
{
|
|
142
|
-
command_path: ['
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
135
|
+
command_path: ['logout'],
|
|
136
|
+
summary: 'Revoke and remove the OAuth credential for one CLI profile.',
|
|
137
|
+
when_to_use:
|
|
138
|
+
'Use this to disconnect a single account. Other profiles keep their credentials unless you pass --all-profiles.',
|
|
146
139
|
args_schema: {
|
|
147
140
|
arguments: [],
|
|
148
141
|
options: [
|
|
149
|
-
{ flags: '--
|
|
142
|
+
{ flags: '--all-profiles', description: 'Clear OAuth credentials and pending authorizations from every CLI profile.' },
|
|
150
143
|
],
|
|
151
144
|
},
|
|
152
|
-
examples: ['notis
|
|
153
|
-
output_schema: '
|
|
154
|
-
mutates: true,
|
|
155
|
-
idempotent: true,
|
|
156
|
-
require_auth: false,
|
|
157
|
-
related_commands: ['notis auth login --jwt <token>'],
|
|
158
|
-
backend_call: { type: 'local', alias_for: 'auth login' },
|
|
159
|
-
deprecated_alias_for: 'notis auth login',
|
|
160
|
-
handler: authLoginHandler,
|
|
161
|
-
},
|
|
162
|
-
{
|
|
163
|
-
command_path: ['logout'],
|
|
164
|
-
display_name: 'logout',
|
|
165
|
-
summary: 'Deprecated alias for `notis auth logout`.',
|
|
166
|
-
when_to_use: 'Use only for backward compatibility with older scripts.',
|
|
167
|
-
args_schema: { arguments: [], options: [] },
|
|
168
|
-
examples: ['notis logout'],
|
|
169
|
-
output_schema: 'Same output as `notis auth logout`.',
|
|
145
|
+
examples: ['notis logout', 'notis logout --profile work', 'notis logout --all-profiles'],
|
|
146
|
+
output_schema: 'Returns oauth_connected=false and the profiles whose OAuth credentials or pending authorizations were cleared.',
|
|
170
147
|
mutates: true,
|
|
171
148
|
idempotent: true,
|
|
172
149
|
require_auth: false,
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
handler:
|
|
150
|
+
allow_unknown_profile: true,
|
|
151
|
+
related_commands: ['notis login', 'notis profile list'],
|
|
152
|
+
backend_call: { type: 'oauth', name: 'revocation' },
|
|
153
|
+
handler: logoutHandler,
|
|
177
154
|
},
|
|
178
155
|
];
|