Browse Source
feat: add Context Chat OCP API
feat: add Context Chat OCP API
Signed-off-by: Edward Ly <contact@edward.ly>pull/53859/head
No known key found for this signature in database
GPG Key ID: 62EA9B12D5B3AC47
7 changed files with 287 additions and 0 deletions
-
50lib/private/ContextChat/ContentManager.php
-
2lib/private/Server.php
-
34lib/public/ContextChat/ContentItem.php
-
33lib/public/ContextChat/Events/ContentProviderRegisterEvent.php
-
105lib/public/ContextChat/IContentManager.php
-
47lib/public/ContextChat/IContentProvider.php
-
16lib/public/ContextChat/Type/UpdateAccessOp.php
@ -0,0 +1,50 @@ |
|||
<?php |
|||
|
|||
/** |
|||
* SPDX-FileCopyrightText: 2024-2025 Nextcloud GmbH and Nextcloud contributors |
|||
* SPDX-License-Identifier: AGPL-3.0-or-later |
|||
*/ |
|||
|
|||
namespace OC\ContextChat; |
|||
|
|||
use OCA\ContextChat\Public\ContentManager as ContextChatContentManager; |
|||
use OCP\ContextChat\IContentManager; |
|||
|
|||
class ContentManager implements IContentManager { |
|||
public function __construct( |
|||
private ?ContextChatContentManager $contentManager, |
|||
) { |
|||
} |
|||
|
|||
public function registerContentProvider(string $appId, string $providerId, string $providerClass): void { |
|||
$this->contentManager?->registerContentProvider($appId, $providerId, $providerClass); |
|||
} |
|||
|
|||
public function collectAllContentProviders(): void { |
|||
$this->contentManager?->collectAllContentProviders(); |
|||
} |
|||
|
|||
public function submitContent(string $appId, array $items): void { |
|||
$this->contentManager?->submitContent($appId, $items); |
|||
} |
|||
|
|||
public function updateAccess(string $appId, string $providerId, string $itemId, string $op, array $userIds): void { |
|||
$this->contentManager?->updateAccess($appId, $providerId, $itemId, $op, $userIds); |
|||
} |
|||
|
|||
public function updateAccessProvider(string $appId, string $providerId, string $op, array $userIds): void { |
|||
$this->contentManager?->updateAccessProvider($appId, $providerId, $op, $userIds); |
|||
} |
|||
|
|||
public function updateAccessDeclarative(string $appId, string $providerId, string $itemId, array $userIds): void { |
|||
$this->contentManager?->updateAccessDeclarative($appId, $providerId, $itemId, $op, $userIds); |
|||
} |
|||
|
|||
public function deleteProvider(string $appId, string $providerId): void { |
|||
$this->contentManager?->deleteProvider($appId, $providerId); |
|||
} |
|||
|
|||
public function deleteContent(string $appId, string $providerId, array $itemIds): void { |
|||
$this->contentManager?->deleteContent($appId, $providerId, $itemIds); |
|||
} |
|||
} |
|||
@ -0,0 +1,34 @@ |
|||
<?php |
|||
|
|||
/** |
|||
* SPDX-FileCopyrightText: 2024-2025 Nextcloud GmbH and Nextcloud contributors |
|||
* SPDX-License-Identifier: AGPL-3.0-or-later |
|||
*/ |
|||
|
|||
namespace OCP\ContextChat; |
|||
|
|||
/** |
|||
* @since 32.0.0 |
|||
*/ |
|||
class ContentItem { |
|||
/** |
|||
* @param string $itemId |
|||
* @param string $providerId |
|||
* @param string $title |
|||
* @param string $content |
|||
* @param string $documentType |
|||
* @param \DateTime $lastModified |
|||
* @param string[] $users |
|||
* @since 32.0.0 |
|||
*/ |
|||
public function __construct( |
|||
public string $itemId, |
|||
public string $providerId, |
|||
public string $title, |
|||
public string $content, |
|||
public string $documentType, |
|||
public \DateTime $lastModified, |
|||
public array $users, |
|||
) { |
|||
} |
|||
} |
|||
@ -0,0 +1,33 @@ |
|||
<?php |
|||
|
|||
/** |
|||
* SPDX-FileCopyrightText: 2024-2025 Nextcloud GmbH and Nextcloud contributors |
|||
* SPDX-License-Identifier: AGPL-3.0-or-later |
|||
*/ |
|||
|
|||
namespace OCP\ContextChat\Events; |
|||
|
|||
use OCP\ContextChat\IContentManager; |
|||
use OCP\ContextChat\IContentProvider; |
|||
use OCP\EventDispatcher\Event; |
|||
|
|||
/** |
|||
* @since 32.0.0 |
|||
*/ |
|||
class ContentProviderRegisterEvent extends Event { |
|||
public function __construct( |
|||
private IContentManager $contentManager, |
|||
) { |
|||
} |
|||
|
|||
/** |
|||
* @param string $appId |
|||
* @param string $providerId |
|||
* @param class-string<IContentProvider> $providerClass |
|||
* @return void |
|||
* @since 32.0.0 |
|||
*/ |
|||
public function registerContentProvider(string $appId, string $providerId, string $providerClass): void { |
|||
$this->contentManager->registerContentProvider($appId, $providerId, $providerClass); |
|||
} |
|||
} |
|||
@ -0,0 +1,105 @@ |
|||
<?php |
|||
|
|||
/** |
|||
* SPDX-FileCopyrightText: 2024-2025 Nextcloud GmbH and Nextcloud contributors |
|||
* SPDX-License-Identifier: AGPL-3.0-or-later |
|||
*/ |
|||
|
|||
namespace OCP\ContextChat; |
|||
|
|||
/** |
|||
* @since 32.0.0 |
|||
*/ |
|||
interface IContentManager { |
|||
/** |
|||
* @param string $appId |
|||
* @param string $providerId |
|||
* @param class-string<IContentProvider> $providerClass |
|||
* @return void |
|||
* @since 32.0.0 |
|||
*/ |
|||
public function registerContentProvider(string $appId, string $providerId, string $providerClass): void; |
|||
|
|||
/** |
|||
* Emits an event to collect all content providers |
|||
* |
|||
* @return void |
|||
* @since 32.0.0 |
|||
*/ |
|||
public function collectAllContentProviders(): void; |
|||
|
|||
/** |
|||
* Providers can use this to submit content for indexing in context chat |
|||
* |
|||
* @param string $appId |
|||
* @param ContentItem[] $items |
|||
* @return void |
|||
* @since 32.0.0 |
|||
*/ |
|||
public function submitContent(string $appId, array $items): void; |
|||
|
|||
/** |
|||
* Update access for a content item for specified users. |
|||
* This modifies the access list for the content item, |
|||
* allowing or denying access to the specified users. |
|||
* If no user has access to the content item, it will be removed from the knowledge base. |
|||
* |
|||
* @param string $appId |
|||
* @param string $providerId |
|||
* @param string $itemId |
|||
* @param Type\UpdateAccessOp::* $op |
|||
* @param array $userIds |
|||
* @return void |
|||
* @since 32.0.0 |
|||
*/ |
|||
public function updateAccess(string $appId, string $providerId, string $itemId, string $op, array $userIds): void; |
|||
|
|||
/** |
|||
* Update access for content items from the given provider for specified users. |
|||
* If no user has access to the content item, it will be removed from the knowledge base. |
|||
* |
|||
* @param string $appId |
|||
* @param string $providerId |
|||
* @param Type\UpdateAccessOp::* $op |
|||
* @param array $userIds |
|||
* @return void |
|||
* @since 32.0.0 |
|||
*/ |
|||
public function updateAccessProvider(string $appId, string $providerId, string $op, array $userIds): void; |
|||
|
|||
/** |
|||
* Update access for a content item for specified users declaratively. |
|||
* This overwrites the access list for the content item, |
|||
* allowing only the specified users access to it. |
|||
* |
|||
* @param string $appId |
|||
* @param string $providerId |
|||
* @param string $itemId |
|||
* @param array $userIds |
|||
* @return void |
|||
* @since 32.0.0 |
|||
*/ |
|||
public function updateAccessDeclarative(string $appId, string $providerId, string $itemId, array $userIds): void; |
|||
|
|||
/** |
|||
* Delete all content items and access lists for a provider. |
|||
* This does not unregister the provider itself. |
|||
* |
|||
* @param string $appId |
|||
* @param string $providerId |
|||
* @return void |
|||
* @since 32.0.0 |
|||
*/ |
|||
public function deleteProvider(string $appId, string $providerId): void; |
|||
|
|||
/** |
|||
* Remove a content item from the knowledge base of context chat. |
|||
* |
|||
* @param string $appId |
|||
* @param string $providerId |
|||
* @param string[] $itemIds |
|||
* @return void |
|||
* @since 32.0.0 |
|||
*/ |
|||
public function deleteContent(string $appId, string $providerId, array $itemIds): void; |
|||
} |
|||
@ -0,0 +1,47 @@ |
|||
<?php |
|||
|
|||
/** |
|||
* SPDX-FileCopyrightText: 2024-2025 Nextcloud GmbH and Nextcloud contributors |
|||
* SPDX-License-Identifier: AGPL-3.0-or-later |
|||
*/ |
|||
|
|||
namespace OCP\ContextChat; |
|||
|
|||
/** |
|||
* This interface defines methods to implement a content provider |
|||
* @since 32.0.0 |
|||
*/ |
|||
interface IContentProvider { |
|||
/** |
|||
* The ID of the provider |
|||
* |
|||
* @return string |
|||
* @since 32.0.0 |
|||
*/ |
|||
public function getId(): string; |
|||
|
|||
/** |
|||
* The ID of the app making the provider avaialble |
|||
* |
|||
* @return string |
|||
* @since 32.0.0 |
|||
*/ |
|||
public function getAppId(): string; |
|||
|
|||
/** |
|||
* The absolute URL to the content item |
|||
* |
|||
* @param string $id |
|||
* @return string |
|||
* @since 32.0.0 |
|||
*/ |
|||
public function getItemUrl(string $id): string; |
|||
|
|||
/** |
|||
* Starts the initial import of content items into context chat |
|||
* |
|||
* @return void |
|||
* @since 32.0.0 |
|||
*/ |
|||
public function triggerInitialImport(): void; |
|||
} |
|||
@ -0,0 +1,16 @@ |
|||
<?php |
|||
|
|||
/** |
|||
* SPDX-FileCopyrightText: 2024-2025 Nextcloud GmbH and Nextcloud contributors |
|||
* SPDX-License-Identifier: AGPL-3.0-or-later |
|||
*/ |
|||
|
|||
namespace OCP\ContextChat\Type; |
|||
|
|||
/** |
|||
* @since 32.0.0 |
|||
*/ |
|||
class UpdateAccessOp { |
|||
public const ALLOW = 'allow'; |
|||
public const DENY = 'deny'; |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue